Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用AJAX轮询的jQuery.live()和.each()_Javascript_Ajax_Jquery_Each - Fatal编程技术网

Javascript 使用AJAX轮询的jQuery.live()和.each()

Javascript 使用AJAX轮询的jQuery.live()和.each(),javascript,ajax,jquery,each,Javascript,Ajax,Jquery,Each,我有一个简单的函数,它遍历整个页面,并使用.each()为匹配的每个元素添加一个CSS类。我还不断用AJAX更新页面,在第一次AJAX更新之后,该功能不再适用 代码: 我理解为什么在第一次AJAX事件后它不起作用,并尝试使用.live()或.delegate()但似乎无法使用此方法绑定非事件的内容(即只能绑定到单击、悬停等),因此。每个()都不起作用 有没有一种简单的方法可以执行此函数,而不将其包含在AJAX成功回调中,也不使用livequery之类的插件,这可能有些过分?可能比为每个匹配项附加

我有一个简单的函数,它遍历整个页面,并使用
.each()
为匹配的每个元素添加一个CSS类。我还不断用AJAX更新页面,在第一次AJAX更新之后,该功能不再适用

代码:

我理解为什么在第一次AJAX事件后它不起作用,并尝试使用
.live()
.delegate()
但似乎无法使用此方法绑定非事件的内容(即只能绑定到单击、悬停等),因此
。每个()
都不起作用


有没有一种简单的方法可以执行此函数,而不将其包含在AJAX成功回调中,也不使用livequery之类的插件,这可能有些过分?

可能比为每个匹配项附加事件处理程序更好的方法是使用带有选择器参数的jQuery.on()附加事件。它允许您执行以下操作:

$('#container').on('click', '.yourClass', function(event){ doStuff(); });


...
...

有关.on()。

的更多信息,我认为这将对您有用:

$('body').on('mychange','div.col-conversation span.label-sticky',function () {
   $(this).closest('li').addClass('stickyhighlight');
});
将此添加到ajax成功函数中:

$('body').trigger('mychange');
或者如果您确实不想(或不能)修改ajax成功函数:

setInterval(function() {
   $('div.col-conversation span.label-sticky').each(function () {
       $(this).closest('li').addClass('stickyhighlight');
   });
},100);

什么时候调用调用
。每个
的函数?…我认为@ExplosionPills的方法是正确的。在新内容加载到页面后,您没有调用函数来添加类。要回答第一个问题。。。在
$(document.ready()
上调用之前。我知道
live()
已被弃用。为了让这项功能正常工作,我在技术上是否必须同时使用这两个函数,一个用于初始页面加载,另一个用于在AJAX事件后保持项目高亮显示?尽管添加了
.trigger()
将原始函数复制/粘贴到ajax成功函数中不是更好吗?我想是的。看起来我确实需要查看()上的
on
$('body').trigger('mychange');
setInterval(function() {
   $('div.col-conversation span.label-sticky').each(function () {
       $(this).closest('li').addClass('stickyhighlight');
   });
},100);