2 Stimmen

Mehrere identische IDs in einer Schleife und Verwendung von jQuery mit ihnen

Ich habe eine Schleife, die eine ganze Reihe von diesen generiert:

<textarea id="uar"></textarea>

Dieselbe Schleife erzeugt neben jedem Textfeld einen Link zum Absenden.

Über diesen Link wird dieses Formular angezeigt:

<form action="php/unApprovePost.php" method="POST" id="unApprovePost">
   <input type="hidden" id="uaid" name="uaid"/>
   <input type="hidden" id="uadc" name="uadc"/>
</form>

Ich fülle #uaid erfolgreich, aber wenn ich versuche, die #uadc Nur die erste Iteration der Schleife hat eine Funktion. Was ich meine ist - nur die erste Textarea wird richtig posten, was ich will. Wenn ich versuche, andere Textareas als das erste zu verwenden, wird nichts gesendet. Ich denke, es hat etwas mit der Eindeutigkeit von IDs in HTML zu tun. Ich habe versucht, eine Klasse zu verwenden .uar aber auch das funktioniert nicht wirklich - dasselbe Verhalten. Jede Hilfe?

Hier ist mein jQuery-Code:

    $('#unApprovePost').submit(function() {
        $('#uadc').val($('#uar').val());
    });

編集する。 Es gibt eine dynamische Anzahl von Schleifenwiederholungen, so dass ich nicht wirklich etwas wie class="uar1" haben kann. Ich habe versucht, es zur Klasse .uar für die Textareas und mit diesem jQuery-Code:

$('#unApprovePost').submit(function() {
   $('#uadc').val($('.uar').val());
});

Aber das Problem bleibt bestehen.

2voto

krtek Punkte 25830

Sie können nicht mehrere HTML-Elemente mit demselben id . Das ist schlichtweg falsch und kann zu einem seltsamen Verhalten Ihrer Seiten führen. Es ist völlig normal, dass nur die erste Textarea funktioniert, weil jQuery nach der angegebenen ID sucht, die erste findet und das Formular sendet.

Es ist das gleiche Problem, wenn Sie immer die gleiche Klasse verwenden, findet jQuery die erste und sendet das Formular.

Ich schlage vor, Sie verwenden eine andere class für jedes Textfeld (d.h. uar1, uar2, uar3, usw.)

1voto

Mads Mogenshøj Punkte 2046

Eine ID soll auf der Seite eindeutig sein. jQuery/Javascript erwartet, dass nur ein Element vorhanden ist, wenn es durch eine ID angesprochen wird.

Verwenden Sie entweder class ou name um die Elemente in eine Schleife zu legen, je nachdem, was Sie brauchen.

0voto

Sjoerd Punkte 71416

$('#uadc') gibt das Element mit der ID uadc zurück. Wenn Sie mehrere Elemente mit dieser ID haben, wird es nicht funktionieren.

<input name="uadc"/> übermittelt seinen Wert mit dem Schlüssel uadc an den Server. Wenn Sie mehrere Eingaben mit demselben Namen im selben Formular haben, wird es nicht funktionieren.

0voto

CraigKerstiens Punkte 5826

Wenn Sie jede der Ids und Submits in ein eigenes Formular packen, sollte es funktionieren. Dies würde jede übermitteln, um den richtigen Textbereich auf der Grundlage der ausgewählten übermitteln zu senden.

<form action="php/unApprovePost.php" method="POST" id="unApprovePost">
    <input type="hidden" id="uaid" name="uaid"/>
    <input type="hidden" id="uadc" name="uadc"/>
    <input type="submit" id="submit" name="submit"/>
</form>

Andernfalls könnten Sie manuell eine Liste aller Kennungen erstellen, wenn Sie wirklich wollen, und eine Liste einsenden. Dies könnte etwa so aussehen:

var values = []
$.each($('#uaid'), function(i, item){
    values.append($(item).val());
}

Das Ergebnis wäre ein Werte-Array, das Sie dann manuell auf der Seite veröffentlichen könnten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X