Javascript 如何使用JQuery将事件应用于动态加载的DOM节点?

Javascript 如何使用JQuery将事件应用于动态加载的DOM节点?,javascript,jquery,dom,Javascript,Jquery,Dom,我使用AHAH在文档准备好后加载一段HTML。在那块HTML中有一个按钮,我想应用一个.click事件。加载HTML后,我无法应用该事件。回调是非常通用的,并且被页面的其他部分使用,所以我不希望用特定的代码填充它。有什么想法吗?研究使用.live()方法:这就是该方法的目的 最好的办法是使用它,或者向包含元素(甚至是body)添加一个Live非常适合于出现气泡的事件。事件监听器是解决那些没有的问题的方法。我认为您必须使用方法来对动态加载的内容做出反应 < /强> ,正如其他人指出的,你要考

我使用AHAH在文档准备好后加载一段HTML。在那块HTML中有一个按钮,我想应用一个.click事件。加载HTML后,我无法应用该事件。回调是非常通用的,并且被页面的其他部分使用,所以我不希望用特定的代码填充它。有什么想法吗?

研究使用.live()方法:

这就是该方法的目的


最好的办法是使用它,或者向包含元素(甚至是
body
)添加一个
Live
非常适合于出现气泡的事件。事件监听器是解决那些没有的问题的方法。

我认为您必须使用方法来对动态加载的内容做出反应


<强> < /强>

,正如其他人指出的,你要考虑使用<代码> $.LIVER()/Cuff>,它将处理所有预先存在的DOM元素的事件,以及后面的任何添加的事件。例如,假设您正在加载的HTML块有一组包含类名“foo”的链接,所有这些链接在单击时都应以特定方式响应:

$(".foo").click(function(){
  // I don't do anything to dynamicall-added elements
});
此示例仅适用于包含类名“foo”的预先存在的项。要处理当前和将来的元素,我们应执行以下操作:

$(".foo").live("click", function(){
  // I handle both present, and future elements
});
现在,如果它包含类名“foo”,任何时候添加的任何内容都将由它处理。这对于像您这样的情况非常有用,在页面生命周期的后期,大块html将被插入DOM。

正如大家所说,.live()方法是专门为此目的设计的,您正在谈论的是.live()处理的单击事件,所以请继续使用它,这将是实现这一目标最简单/最快的方法

不过,这只是一个建议,您是说您有一个非常通用的回调函数,对于一个非常类似的情况,我不能使用.live()(之后我必须进行一些相当复杂的处理),因此我通过向初始调用添加一个参数来增加灵活性,以便调用代码可以指定自定义回调。大致如下:

callToAGenericService({url: '...', target: someId, callback: function myCustomCallBack (xhr) {
   console.log('Custom callback');
   console.dir(xhr);
}});
function genericServiceCallback(options,xhr) {
   //Do the 'generic processing' of the request

   // if calling code specified a custom callback, execute it
   if (options.callback) {
      options.callback(options,xhr);
   }
}
通用服务通用回调被修改为以下内容:

callToAGenericService({url: '...', target: someId, callback: function myCustomCallBack (xhr) {
   console.log('Custom callback');
   console.dir(xhr);
}});
function genericServiceCallback(options,xhr) {
   //Do the 'generic processing' of the request

   // if calling code specified a custom callback, execute it
   if (options.callback) {
      options.callback(options,xhr);
   }
}

它显然要复杂得多(主要是错误和范围处理),但给出了一个想法。

如果它只是您希望管理的.click()事件,则表示同意。不是所有的事件都与.live()一起工作。如果这不只是与.click()事件有关的话,那么我还有另一个方法。如果你需要的话就告诉我。