我正在尝试将点击处理程序绑定到传入的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内容吗?对我来说,这似乎非常可疑。什么是适当的方法来做到这一点?
答案 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)
您是否考虑过使用.delegate
? http://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');
});