jQuery健全检查

时间:2010-02-04 01:14:38

标签: javascript jquery

这让我发疯了。请有人告诉我,我并不疯狂:

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

跆拳道?

4 个答案:

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