Javascript jqueryajax和dom问题

Javascript jqueryajax和dom问题,javascript,jquery,Javascript,Jquery,我正在使用JQuery向表中添加一行。行中有一个元素,我正在捕获该元素的单击事件: $(document).ready(function() { var newRow = "<tr> ... </tr>"; $('tableName > tbody:last').append(newRow); $(...).click( function() { // click event on newly inserted elem in the row

我正在使用JQuery向表中添加一行。行中有一个元素,我正在捕获该元素的单击事件:

$(document).ready(function() {
   var newRow = "<tr> ... </tr>";
    $('tableName > tbody:last').append(newRow);

   $(...).click( function() { // click event on newly inserted elem in the row
      alert("click");
   });
}
html已正确添加到DOM中,但不再捕获单击事件。这里的作用域或闭包是否存在问题?

使用

 $(...).live('click', function() { // click event on newly inserted elem in the row
      alert("click");
   });
这将使click事件在使用后保持运行

使用

 $(...).live('click', function() { // click event on newly inserted elem in the row
      alert("click");
   });
这将使click事件在使用后保持运行


您应该研究如何使用live()事件处理程序。它允许您创建一个与将来创建的元素动态匹配的事件,而这正是目前没有发生的事情。另一种解决方法是将all to绑定向下移动到新表行的附加位置,但live()是一个更好的答案。

您应该研究如何使用live()事件处理程序。它允许您创建一个与将来创建的元素动态匹配的事件,而这正是目前没有发生的事情。另一种修复方法是将all to bind向下移动到您附加新表行的下方,但live()是一个更好的答案。

处理表时,我喜欢使用它。它非常类似于
.live()
,但允许您在单个父元素上设置事件侦听器,而不是在每个子元素上设置单独的处理程序。因此,无论您的表是一行还是1000行,您仍然只需要一个处理程序

$('#yourtable').delegate('your_descendant_element','click', function(){
   alert("click"); 
});

当使用桌子时,我喜欢使用它。它非常类似于
.live()
,但允许您在单个父元素上设置事件侦听器,而不是在每个子元素上设置单独的处理程序。因此,无论您的表是一行还是1000行,您仍然只需要一个处理程序

$('#yourtable').delegate('your_descendant_element','click', function(){
   alert("click"); 
});

哇,真管用,谢谢!你能解释一下为什么会这样吗?我的意思是,我正在创建dom元素之后的单击处理程序。。。无论哪种方式,我都会接受你的答案,因为ajax调用是异步的吗?因此,本质上,在注册HandlerEssentialy.live()之前并没有真正创建dom。在向页面添加新元素时,无论是使用ajax还是仅在click函数中添加元素,都需要使用live()。基本经验法则,如果您的dom正在更改,请使用.live()。请查看我答案中的“更多信息”链接,了解更多信息:)哇,效果不错,谢谢!你能解释一下为什么会这样吗?我的意思是,我正在创建dom元素之后的单击处理程序。。。无论哪种方式,我都会接受你的答案,因为ajax调用是异步的吗?因此,本质上,在注册HandlerEssentialy.live()之前并没有真正创建dom。在向页面添加新元素时,无论是使用ajax还是仅在click函数中添加元素,都需要使用live()。基本经验法则,如果您的dom正在更改,请使用.live()。查看我答案中的“更多信息”链接,了解更多信息:)我同意
.delegate()
而不是
.live()
。如果新元素都在一个表中,那么最好将处理程序限制为该表中的单击事件,而不是整个文档+1我同意
.delegate()
而不是
.live()
。如果新元素都在一个表中,那么最好将处理程序限制为该表中的单击事件,而不是整个文档+1.