Jquery循环遍历在运行时创建的元素

时间:2013-03-08 16:43:40

标签: jquery html loops foreach

我有一个传递给页面的列表,并且元素是在运行时创建的。我想循环遍历这些元素并为每个元素执行一些操作。下面是我的代码: 对于从此列表中创建的每个人,我想对该人进行检查。有人可以帮助我,我只会检查一次:

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>

4 个答案:

答案 0 :(得分:5)

您不能在具有相同id属性的网页上拥有多个元素。尝试使用类。

尝试类似:

$(document).ready(function() {

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

另外需要注意的是.val是一种方法,所以你需要调用它来获取值。使用.val()代替.val。现在你有代码,$(selector).val是一个函数,所以它永远不会是你正在测试它的空字符串。

你的JSP应该是这样的:

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

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

答案 1 :(得分:3)

您的循环将创建具有相同ID的多个元素,首先更改它。最好使用类名。

<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>

接下来,您可以使用.find()查找动态生成的元素。但我建议使用class属性来使用我的解决方案。

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

答案 2 :(得分:2)

正如@Andbdrew所说,使用一个类而不是一个id,因为它会在找到与id匹配的第一个项目之后停止查找更多的项目。

此外,您还需要在我们的功能中使用this代替$("#userId")

所以做这样的事情:

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

答案 3 :(得分:1)

为什么不通过jQuery选择TAG。 例如,具有用户列表的元素是一个id为tblUsers的表,然后您可以在运行时生成的TR或TD上迭代,如下所示:

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

如果你在tds中有输入,你可以深入选择

$("tblUsers tr td input")