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