如何确保通过AJAX插入的JavaScript将在随附的HTML(也通过AJAX接收)在DOM中准备好后执行?

时间:2010-05-14 16:23:13

标签: javascript jquery ajax

我已经将部分页面替换为通过AJAX调用检索到的HTML。一些HTML回来的JavaScript需要运行一次才能初始化随附的HTML(设置事件处理程序)。

由于文档已经加载,当我使用jQuery的.html函数替换大块的HTML时,由于页面很久以前加载了jQuery(document).ready(function() {...});,因此只是一小段HTML被替换。

当通过AJAX加载内容时,附加代码与其感兴趣的HTML一起打包的事件处理程序的最佳方法是什么?我应该在HTML之后放一个程序性的javascript块,这样当我插入新的HTML块时,jQuery会立即执行javascript吗? HTML肯定是在DOM中,并且可以通过同一.html调用的JavaScript来处理吗?

2 个答案:

答案 0 :(得分:5)

使用.live()http://api.jquery.com/live/

可以将某些事件绑定到当前和未来的元素
$('.button').live('click', function() {
  // do something.
});

.live()确实有一些限制(参见链接文档):

  • 它不适用于原生DOM 元素所以$('table')。live('click', 功能(){});不会起作用。
  • 它不能被束缚 $( 'somediv ')。next()的。生活(' 点击', 功能(){});不会起作用。

.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适用于这种情况。