簡體   English   中英

jQuery ajax和dom問題

[英]JQuery ajax and dom issue

我正在使用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");
   });
}

這很好用,並且警報按預期出現。 但是,當我現在通過ajax調用動態添加新行並解析xml時,它將停止工作:

$(document).ready(function() {
   getData();

   $(...).click( function() { // click event on newly inserted elem in the row
      alert("click");
   });

   function getData() {
      $.ajax({
          ...
          success: function(data) {
             //parse the xml

             $('tableName > tbody:last').append(parsedXml);
          }
   });
}

html已正確添加到DOM,但不再捕獲click事件。 這里的作用域或關閉是否有問題?

采用

 $(...).live('click', function() { // click event on newly inserted elem in the row
      alert("click");
   });

使用Click事件后,它將保持運行狀態

更多信息

當使用表時,我喜歡為此使用.delegate() 它與.live()非常相似,但是允許您在單個元素上設置事件偵聽器,而不是在每個子元素上設置單獨的處理程序。 因此,無論您的表是一行還是1000,您仍然只需要一個處理程序。

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

您應該研究使用live()事件處理程序。 它使您可以創建一個事件,該事件與將來動態創建的元素進行動態匹配,而現在還沒有發生這種情況。 解決該問題的另一種方法是將所有內容向下移動到附加新表行的位置下方,但是live()是一個更好的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM