我已经将部分页面替换为通过AJAX调用检索到的HTML。一些HTML回来的JavaScript需要运行一次才能初始化随附的HTML(设置事件处理程序)。
由于文档已经加载,当我使用jQuery的.html
函数替换大块的HTML时,由于页面很久以前加载了jQuery(document).ready(function() {...});
,因此只是一小段HTML被替换。
当通过AJAX加载内容时,附加代码与其感兴趣的HTML一起打包的事件处理程序的最佳方法是什么?我应该在HTML之后放一个程序性的javascript块,这样当我插入新的HTML块时,jQuery会立即执行javascript吗? HTML肯定是在DOM中,并且可以通过同一.html
调用的JavaScript来处理吗?
答案 0 :(得分:5)
使用.live()http://api.jquery.com/live/:
可以将某些事件绑定到当前和未来的元素$('.button').live('click', function() {
// do something.
});
.live()确实有一些限制(参见链接文档):
.delegate()方法应该可以缓解这些限制,但我知道它有自己的局限性。我实际上还没有用过这个......不需要。来自文档:
代表是使用的替代方案 .live()方法,允许每个 事件委托的绑定 特定的DOM元素。
您还可以在JQuery中的AJAX成功/错误/完成函数中绑定新事件:
$.ajax({
url: 'something.html',
success: function(data) {
//add new elements with data.
//bind new events to elements
}
});
答案 1 :(得分:0)
jQuery.live适用于这种情况。