将工作.each(.. .change())迁移到.each(.live(“change ...”))不起作用jQuery
问题描述:
我有一个输入列表,和其他动态加载。我需要总结他们所有人,因为我需要检查他们都不超过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);
});
});
预先感谢您!
答
您好像误解了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);
});
谢谢。这段代码适用于HTML中的第一个input.percentage。问题是我正在用JavaScript添加其他人,如果我加载更多,这些失败。 :( – udexter 2011-02-28 13:57:23
@udexter:他们肯定是添加了正确的类等吗?也许显示脚本用于添加它们? – Chris 2011-02-28 14:08:41
@udexter:正如Chris所说,我们能否看到将新元素添加到DOM的脚本?我提供的代码应该可以为此工作 – Matt 2011-02-28 14:12:31