2013-03-08 15 views
5

Ich habe eine Liste, die an eine Seite übergeben wird und die Elemente zur Laufzeit erstellt werden. Ich möchte diese Elemente durchlaufen und einige Aktionen für jedes Element durchführen. Unter ist mein Code: für jede Person, die von dieser Liste erstellt wird, möchte ich einen Scheck über diese Person machen. Kann mir jemand mir nur helfen, wenn geschieht die Prüfung bekommen:Jquery Looping durch zur Laufzeit erstellte Elemente

jQuery:

$(document).ready(function() { 

    $("#userId").each(function(i){ 
     if ($("#userId").val != '') { 
      alert('not null' + i); 
     } 
    });     
}); 

JSP:

<c:forEach items="${person}" var="person"> 

<input= type="text" id="userId" value="${person.userid}" /> 
    First name:- ${person.fName} , Last Name:- ${person.lName} 
</c:forEach> 
+1

Der ID-Selektor, wie die jquery-Dokumentation besagt: * Wählt ein einzelnes Element mit dem angegebenen ID-Attribut aus. * Das ist, dass Sie den Scheck nur einmal bekommen. – EmCo

Antwort

5

Sie nicht haben können mehrere Elemente auf einer Seite mit dem gleichen id Attribute. Versuchen Sie stattdessen, Klassen zu verwenden.

versuchen so etwas wie:

$(document).ready(function() { 

    $(".userId").each(function(i){ 
     if ($(this).val() != '') { 
      alert('not null' + i); 
     } 
    }); 
}); 

Eine andere Sache ist zu beachten, dass .val ein Verfahren ist, so dass Sie es nennen müssen, um den Wert zu erhalten. Verwenden Sie .val() anstelle von .val. Wie Sie jetzt Ihren Code haben, ist $ (selector) .val eine Funktion, daher wird es niemals die leere Zeichenkette sein, gegen die Sie es testen.

Auch sollte Ihre JSP so etwas wie:

<c:forEach items="${person}" var="person"> 

<input= type="text" class="userId" value="${person.userid}" /> 
    First name:- ${person.fName} , Last Name:- ${person.lName} 
</c:forEach> 
3

Ihre Schleife mit mehreren Elementen mit derselben ID erstellen, zuerst das ändern. Es ist besser, stattdessen Klassennamen zu verwenden.

<c:forEach items="${person}" var="person"> 

    <input= type="text" class="user" id="userId-${person.userid}" value="${person.userid}" /> 
     <!--   ^Use Class &^Id to uniquely identify the user --> 
     First name:- ${person.fName} , Last Name:- ${person.lName} 
</c:forEach> 

Als nächstes können Sie .find() verwenden, auch das dynamisch generierte Element zu finden. Ich empfehle jedoch, meine Lösungen mit dem Attribut class zu verwenden.

$(".user").each(function(i) { 
    if ($(this).val() != '') { 
      alert('not null' + i); 
    } 
}); 
+0

'.find' hat nichts mit dynamisch hinzugefügten Elementen zu tun. Es ist nur eine Möglichkeit, Abkömmlinge der aktuellen Menge übereinstimmender Elemente zu finden. – Andbdrew

+0

@Andbdrew, Eigentlich tut es das. Überprüfen Sie, ob '.find()' neu hinzugefügte Elemente zum DOM finden kann. (Hast du mich aus diesem Grund abgelehnt?) – Starx

+0

Es hängt damit zusammen, warum ich deine Antwort abgelehnt habe, aber es gibt noch andere Gründe.Das OP möchte keine Klickereignisse an diese Elemente anhängen, daher beantwortet Ihr Skript die Frage nicht. Siehe auch die Dokumentation zu .find hier http://api.jquery.com/find/. Es hat nichts mit dem dynamischen Hinzufügen von Ereignissen zu tun. Es erlaubt nur die Suche in Ihrem aktuellen Matched-Set. Es ist nicht so, dass deine Aussage über das Finden falsch war, es hat nur nichts mit dem vorliegenden Problem zu tun. Macht das Sinn für dich? – Andbdrew

2

Wie @Andbdrew gesagt, verwenden Sie eine Klasse anstelle einer ID, wie es für mehrere Objekte sucht, wird nicht mehr, nachdem es das erste findet, dass die ID übereinstimmt.

Auch möchten Sie this anstelle von $("#userId") in unserer Funktion verwenden.

So etwas tun, wie folgt aus:

$(".userClass").each(function(i) { 
    if ($(this).val() != '') { 
     alert('not null' + i); 
    } 
}); 
+0

'.val' ist eine Methode und muss – Andbdrew

+0

genannt werden Danke. Entschuldigung für den Tippfehler.! – krillgar

1

Warum wählen Sie nicht mit der TAG von jQuery.

$("#tblUsers tr").each(function(i){ 
     alert('td' + i); 
}); 

weiter, wenn Sie Eingänge haben in tds Sie tief in Auswahl als

gehen kann: Zum Beispiel das Element Ihre Benutzer Liste mit eine Tabelle mit der ID tblUsers dann können Sie Laufzeit generiert TRs oder TDs wie folgt itereate über
$("tblUsers tr td input")