2009-10-11 24 views
2

假設我使用jQuery將新內容加載到特定的DIV元素中。如果我現在想從該DIV元素中捕獲事件,那麼我認爲DOM必須以某種方式更新?處理這個問題的最佳方法是什麼?在jQuery中插入後更新DOMD

編輯:這是我的意思的例子:

<html> 
    <head> 
    <script type="text/javascript" src="jquery-1.3.2.min.js"></script> 
    <script> 
     $(document).ready(function(){ 
     $(".edit").click(function(){ 
      $(this).parent().load("edit"); 
     }); 
     $(".view").click(function(){ 
      $(this).parent().load("view"); 
     }); 
     }); 
    </script> 
    </head> 
    <body> 
    <div class='someid'> 
     <input type='submit' class='edit' value='Edit'> 
    </div> 
    </body> 
</html> 

,其中在同級別文件edit包含

<input type='submit' class='view' value='View'> 

和文件 '視圖' 包含

<input type='submit' class='edit' value='Edit'> 

如果您嘗試了這一點,您會看到當您第一次按下Edit時,該按鈕將更改爲View,但那麼它不會再改變。爲什麼是這樣?

+0

如果您將新內容加載到DIV元素中,那麼*與更新DOM的效果相同,不是嗎? – ChrisW 2009-10-11 14:06:53

+0

我的意思是如果我使用例如$(this).load('getcontent'),並且該內容包含新的DIV元素以及之前未定義的新ID,我似乎無法使用jQuery選擇這些新元素 – astrofrog 2009-10-11 14:08:45

回答

5

live使用這樣的:

$(".view").live("click",function(){ 
     $(this).parent().load("view"); 
    }); 
1

jQuery使用「live」事件來處理動態添加的DOM元素中發生的事件,而無需在內容更新後手動添加處理程序。

+0

我已經向我的原始張貼顯示問題是什麼 – astrofrog 2009-10-11 14:29:45

21

由於jQuery的1.7.x的.live()方法已被棄用。使用.on()附加事件處理程序。如果您使用的是舊版本,則應使用.delegate()而不是.live()

如幫助提到的,格式不改變很多像本例所示:

$(選擇).live(事件,數據,處理程序); // jQuery 1.3+
$(document).delegate(selector,events,data,handler); //(jQuery 1.4.3+)
$(document).on(events,selector,data,handler); // jQuery的1.7+

如此以來1.7.x,兩者代表現場已經在 superseeded通過