1

我无法在通过加载的按钮上使用 click() 事件

html().
$.post('includes/addconnectordetails.php',{connnumb: connno},function(data){
    $('#divgeneratecheck').html(data);    
});

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

4

4 回答 4

4

您将不得不使用on()动态元素:

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

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

于 2012-06-27T19:13:04.590 回答
4

您需要使用.on,您必须将其附加到您想要拥有该事件的项目的父级。我使用身体,但在你的情况下可能是#divgeneratecheck

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

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

于 2012-06-27T19:17:33.983 回答
3

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

考虑创建一张地图,然后尝试将该地图用于以前不在其上的位置。由于它最初不存在,因此您不会知道它存在,因此无法正常引用它。然而,委托事件本质上允许该位置在创建后添加到地图中,然后被引用,即使它最初并不存在。

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

此外:

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

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

除了能够处理尚未创建的后代元素上的事件之外,委托事件的另一个优点是当必须监视许多元素时,它们的开销可能会大大降低。

于 2012-06-27T19:27:10.973 回答
1

jquery 无法在没有帮助的情况下挂钩动态加载的 html,请查看 jquery 网站中的 live()、on() 或 delegate()。

于 2012-06-27T19:13:16.483 回答