无法在按钮上使用.click()事件

时间:2012-06-27 19:11:11

标签: jquery

我无法在通过

加载的按钮上使用click()事件
html().
$.post('includes/addconnectordetails.php',{connnumb: connno},function(data){
    $('#divgeneratecheck').html(data);    
});

我从div#divgeneratecheck上的addconnectordetails.php页面加载一个表单,表单正在加载,但我无法在表单中显示的按钮上使用.click()事件。我怎么能这样做?

4 个答案:

答案 0 :(得分:4)

您必须使用on()作为动态元素:

$('selector').on('click', function() {
   // your code
});

http://api.jquery.com/on/

答案 1 :(得分:4)

您需要使用.on,您必须将其附加到您想要举办活动的项目的父级。我使用body,但在你的情况下可能是 #divgeneratecheck

$('body').on('click','SELECTOR',function() {
  /* Code here  */
});

只需将选择器替换为要将事件附加到的dom部分。 (比如#btn1或.button)

答案 2 :(得分:3)

您遇到的问题是由于事件委派。当您尝试通过click()事件处理程序附加事件侦听器时,它将仅引用最初创建的元素,而不是动态加载的元素。

考虑创建一个地图,然后尝试将该地图用于之前未在其上的位置。由于它最初缺席,你不会知道它存在,因此无法正常引用它。但是,委托事件基本上允许在创建映射后将该位置添加到映射中,然后即使它最初不在那里也会被引用。

  

.on()方法将事件处理程序附加到当前选定的集合   jQuery对象中的元素。从jQuery 1.7开始,使用.on()方法   提供附加事件处理程序所需的所有功能。对于   帮助转换旧的jQuery事件方法,请参阅.bind(),   .delegate()和.live()。要删除与.on()绑定的事件,请参阅   .off()。附加仅运行一次然后删除的事件   本身,见.one()

另外:

  

事件处理程序仅绑定到当前选定的元素;他们   在您的代码调用.on()时页面上必须存在。   要确保元素存在且可以选择,请执行事件   绑定在文档就绪处理程序中的元素   页面上的HTML标记。如果将新HTML注入页面,   选择元素并在新HTML之后附加事件处理程序   放入页面。或者,使用委派事件来附加事件   处理程序,如下所述。

     

委派事件的优势在于它们可以处理来自的事件   稍后添加到文档中的后代元素。通过   选择一个保证在当时存在的元素   委托事件处理程序附加,您可以使用委托事件   避免频繁附加和删除事件处理程序的需要。这个   element可以是a中视图的容器元素   例如,模型 - 视图 - 控制器设计,或者如果事件是文档   handler希望监视文档中的所有冒泡事件。该   文档元素在之前的文档头部中可用   加载任何其他HTML,因此可以安全地在那里附加事件   等待文件准备好。

     

除了能够处理后代元素的事件外   尚未创建,委托事件的另一个优势是他们的   当许多元素必须存在时,开销要低得多   监测。

答案 3 :(得分:1)

如果没有一些帮助,jquery无法挂钩动态加载的html,请查看jquery网站中的live(),on()或delegate()。