2011-02-28 97 views
3

我有一个输入列表,和其他动态加载。我需要总结他们所有人,因为我需要检查他们都不超过99.将工作.each(.. .change())迁移到.each(.live(“change ...”))不起作用jQuery

问题是,与.live()我无法得到它的工作,但它与.change ()。

/* this works */ 
$(".percentage").each(function() { 
    $(this).change(function() { 
     var sum = 0; 
     $(".percentage").each(function() { 
      sum += $(this).val(); 
     }); 
     alert(sum); 
    }); 
}); 

/* this don't */ 
$(".percentage").each(function() { 
    $(this).live("change keyup focus click keydown", function() { 
     var sum = 0; 
     $(".percentage").each(function() { 
      sum += $(this).val(); 
     }); 
     alert(sum); 
    }); 
}); 

预先感谢您!

回答

3

您好像误解了live的工作原理。 live()将处理程序附加到DOM中与给定选择器匹配的所有当前和将来元素。你正在做的是,对于当前在DOM中的每个元素有一个“百分比”类,你将一个事件绑定到当前所有具有“百分比”类的未来元素,所以每个元素以许多事件绑定结束到它。

尝试:

$('.percentage').live('change keyup focus click keydown', function() { 
    var sum = 0; 

    $(".percentage").each(function() { 
     sum += $(this).val(); 
    }); 

    alert(sum); 
}); 

此外,val()将返回一个字符串,所以你要做的:

$(".percentage").each(function() { 
    sum += parseInt($(this).val(), 10); 
}); 
+0

谢谢。这段代码适用于HTML中的第一个input.percentage。问题是我正在用JavaScript添加其他人,如果我加载更多,这些失败。 :( – udexter 2011-02-28 13:57:23

+0

@udexter:他们肯定是添加了正确的类等吗?也许显示脚本用于添加它们? – Chris 2011-02-28 14:08:41

+0

@udexter:正如Chris所说,我们能否看到将新元素添加到DOM的脚本?我提供的代码应该可以为此工作 – Matt 2011-02-28 14:12:31

相关问题