这让我发疯了。请有人告诉我,我并不疯狂:
var constraints = $('.traffic-constraints :input');
console.log(constraints);
var i;
for (i = 0; i < constraints.length; i++) {
if (constraints[i].val() > 0) { //<-------- errorrzz
....
控制台告诉我,事实上,我在选择器中有5个输入对象。但是,我收到以下错误:constraints[i].val is not a function
跆拳道?
答案 0 :(得分:2)
首先,使用.each()
更容易:)
但是,要回答问题为什么不起作用......你正在处理带有该索引的dom元素,你需要将其包装起来或.eq(i)
使用它:
for (i = 0; i < constraints.length; i++) {
if ($(constraints[i]).val() > 0) {
或(更好,但仍使用.each()
!):
for (i = 0; i < constraints.length; i++) {
if (constraints.eq(i).val() > 0) {
答案 1 :(得分:1)
jQuery有一个.each()
方法来循环遍历集合的元素。您可以这样使用它:
$('.traffic-constraints :input').each(function(index) {
if($(this).val() > 0) {
doSomething();
}
});
你的循环不起作用的原因是元素没有用jQuery的方法扩展。以下修复了它:
var constraints = $('.traffic-constraints :input');
console.log(constraints);
var i;
for (i = 0; i < constraints.length; i++) {
if ($(constraints[i]).val() > 0) {
doSomething();
}
}
但出于代码可维护性和最佳做法的原因,请使用.each()
。它并不明显更慢,更易于维护和理解。
答案 2 :(得分:1)
访问这样的元素(例如$('.traffic-constraints :input')[0]
)会返回 HTML 元素(或DOM节点,更加迂腐)。如果你想获得jQuery包装的元素,请调用constraints.eq (i)
答案 3 :(得分:0)
为什么不使用each?