5

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

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

4 回答 4

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>
于 2013-03-08T16:45:28.260 回答
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);
    }
});
于 2013-03-08T16:46:41.727 回答
2

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

此外,您需要使用this而不是$("#userId")在我们的函数内部。

所以做这样的事情:

$(".userClass").each(function(i) {
    if ($(this).val() != '') {
        alert('not null' + i);
    }
});
于 2013-03-08T16:47:58.213 回答
1

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

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

此外,如果您在 tds 中有输入,则可以深入选择

$("tblUsers tr td input")
于 2014-01-23T14:15:43.423 回答