将一个工作的.each(..。change())迁移到.each(.live(“change ...”))不起作用jQuery

时间:2011-02-28 13:50:29

标签: jquery

我有一个输入列表,这些输入在文档就绪时加载了一些,而其他的则是动态加载的。我需要总结所有这些,因为我需要检查它们的总和不超过99。

问题在于.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);
    });
});

提前谢谢!

1 个答案:

答案 0 :(得分: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);
});