带有ajaxed内容的jQuery on()

时间:2012-02-23 17:47:26

标签: javascript jquery

我正在尝试将点击处理程序绑定到传入的ajaxed内容。我曾经使用'live'

   $('#div').live('click', function(event) {
        alert('I got clicked, Live style'); 
   });

但是现在随着我的网站变得越来越复杂,我意识到使用直播并让所有内容冒泡到DOM的顶端是多么疯狂。哪个不理想。

所以我开始使用on(),

   $('#div').on('click', function(event) {
        alert('I got clicked, On style');   
   });

但是我想念使用live()我只能初始化点击处理程序一次并完成它,而不是每次加载新内容时重新初始化它们。这两个世界都是最好的吗?

除了在ajax回调函数中创建处理程序之外,还有更好的方法来“重新加载”点击处理程序以识别新的ajax内容吗?对我来说,这似乎非常可疑。什么是适当的方法来做到这一点?

4 个答案:

答案 0 :(得分:8)

从jQuery 1.7开始,以下.on()事件绑定等同于不推荐使用的live:

$(document).on('click', '#div', function(event) {
    alert('I got clicked, On style');
});

您还可以将事件绑定到DOM下方的某个固定元素,这些元素不会重新生成,此功能与.delegate()相同:

$('#parentofdiv').on('click', '#div', function(event) {
    alert('I got clicked, On style');
});

建议使用第二种形式尽可能缩小事件绑定的范围,以便于维护。

修改:对于记录,您最初在帖子中所做的操作将成为您代码中.bind()次来电的首选替代。

答案 1 :(得分:0)

jQuery的on()方法可用于将各种事件附加到现有项目以及将来通过ajax调用添加到DOM中的项目:

$(document).on("click", ".ajax-added-content", function(event) {
   alert('I got clicked, On style');   
});

答案 2 :(得分:0)

您是否考虑过使用.delegatehttp://api.jquery.com/delegate/

答案 3 :(得分:-1)

可以用

做你想做的事
.on()

实际上是推荐的方法。

.live()
截至jquery 1.7,

已弃用。

您可以将事件附加到正文并使用“on”的重载来获得所需的功能。检查jquery's doco of .on

中的最后一个示例
$("body").on("click", "#div", function(){
      alert('I got clicked, On style');
});