jQuery live()不工作..可能做错了?

时间:2011-05-10 14:57:33

标签: jquery live

我有一个分页的项目列表,每个项目都有一个与之关联的复选框。

如果我单击一个复选框,我会将该复选框的ID写入cookie。当页面重新加载时,我想重新检查所有先前选中的复选框。

使用以下代码可以正常工作:

$('.fund-compare-check-box').each(function () {
    var cookie = getCookie("fund_basket").split("|");

    // re-check all check boxes
});

我遇到的问题是,当我加载下一页结果时。上面的代码仅在DOM准备就绪时运行。

我认为我可以通过使用.live()而不是.each()来解决这个问题,如下所示:

$('.fund-compare-check-box').live('each', function () {
    var cookie = getCookie("fund_basket").split("|");

    // re-check all check boxes
});

但是当我使用它时,根本没有任何事情发生。我做错了吗?任何指针都会非常感激!

6 个答案:

答案 0 :(得分:3)

jQuery.live仅适用于事件,“each”不是事件。此外,jQuery.live仅适用于大多数事件,有些不受支持。见参考文献:

http://api.jquery.com/live/

直播支持自定义活动,因此您可以尝试以下内容:

$('.myClass').live('onCreated', function() {
    doSomething();
});

然后确保在创建新元素时手动调用“onCreated”事件。

$(newElementsOnly).trigger('onCreated');

这样做可以将“新元素”逻辑合并到一个位置,如果因任何原因(ajax响应或“添加元素”按钮点击)动态添加元素,则可以触发onCreated事件。

这是一个奇怪的jsFiddle示例:http://jsfiddle.net/xixionia/YshhU/

答案 1 :(得分:3)

live用于将事件处理程序绑定到当前可能存在或不存在的元素。第一个参数是事件类型。您的代码将函数绑定到与您的选择器匹配的元素上的each事件。显然,each事件不存在。

您可能希望在每次AJAX查询后执行代码(我假设您的元素是通过AJAX添加的)。如果是这种情况,您可以使用ajaxComplete

$(document).ajaxComplete(function() {
    $('.fund-compare-check-box').each(function () {
        var cookie = getCookie("fund_basket").split("|");

        // re-check all check boxes
    });
});

如果您的内容以不同的方式添加,则每次添加内容时都必须找出一些方法来调用该功能。

答案 2 :(得分:1)

当您需要在将来向对象附加新事件时,

live()非常有用; jQuery的each函数不是一个事件。在您的情况下,您应该将此逻辑提取到方法,并在加载页面时简单地调用它;再次加载新的结果页面时。

答案 3 :(得分:0)

live()函数的目的是允许您将事件处理程序附加到DOM中可用的项目,而不是在元素可用时遍历或循环遍历。

答案 4 :(得分:0)

live函数侦听在加载页面后添加的元素发生的事件。你必须打电话

$('.fund-compare-check-box').each(function () {
    var cookie = getCookie("fund_basket").split("|");

    // re-check all check boxes
});

再次添加要根据Cookie检查的新复选框时。

答案 5 :(得分:-1)

如果你想重新检查这些复选框,那么你应该在服务器端进行。