我有一个分页的项目列表,每个项目都有一个与之关联的复选框。
如果我单击一个复选框,我会将该复选框的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
});
但是当我使用它时,根本没有任何事情发生。我做错了吗?任何指针都会非常感激!
答案 0 :(得分:3)
jQuery.live仅适用于事件,“each”不是事件。此外,jQuery.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)
如果你想重新检查这些复选框,那么你应该在服务器端进行。