我很好奇为什么当我用.live()替换.on()时,通过html()方法插入AJAX的响应后我的事件不起作用。假设我有html结构:

<div class="a">
   <a href="" class="alert-link">alert</a>
   <a href="" class="ajax-update">update</a>
</div>


和jQuery代码类似:

$('.alert-link').on("click", function(){
 alert('abc');
 return false;
});


并且ajax-update将触发请求,该响应将是

警报
更新

然后将其插入parent()。然后再次按下alert-link将导致重定向到/,但是如果我将.on()更改为.live(),则会再次显示警报。我在这里想念什么?我已经读到.on()可以替代.delegate().live()

最佳答案

.on组合并替换.bind.live.delegate。语法$('selector').on('event', callback)在道德上等同于bind,而不是live

将过滤选择器添加到对on的调用中:

$('container').on('click', 'child-filter', callback);


在这种情况下,

$('.a').on("click", ".alert-link", function(){
    alert('abc');
    return false;
});


之所以进行了更改,是因为将委托处理程序附加到本地化的容器元素上比将处理程序附加到DOM根的旧.live样式更有效。

换句话说,即使alert-link元素仅出现在小的a div内部,对于.live,jQuery也会侦听页面上的每个单击事件并将其与委托选择器进行比较。通过更具针对性,jQuery只需处理对a中元素的单击。

关于jquery - jQuery:关于vs直播,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9864476/

10-12 12:59
查看更多