2012-04-20 121 views
2

我有index.php並使用jQuery .load()從load.php加載內容。jQuery:觸發器不會觸發使用.load()加載的元素

當我在index.php中的元素上觸發事件時,事件觸發。在相同的元素上,當將.load()加載到index.php時,事件不會觸發!

爲什麼?我做錯了什麼?

如果我用例如螢火,元素的#ID酷似也是應該的,但甚至沒有這樣的功能的工作原理:

$('#clickme').click(function() { 
    alert('hello'); 
}); 

同樣功能的工作原理,如果元件被放置在index.php文件,而不是裝載。加載()。有任何想法嗎??

非常感謝您提前!

+0

您是否用文檔準備好了包裝功能?我不確定,但是我認爲當ajax加載時,事件不會在這種情況下被觸發......有人可以證實這一點嗎? – Helmut 2012-04-20 20:15:28

回答

2

click事件綁定不綁定到執行後創建的任何元素。您可以在​​方法之後立即添加一個click偵聽器,也可以使用類似livedelegate的東西來綁定DOM中的元素模式。

+0

這是否意味着,如果在index.php中已經有相同的元素(例如#clickme),但在.load()之後它將被另一個#clickme取代,這會起作用嗎? – Chris 2012-04-20 20:21:29

+0

嗯......我想如果你摧毀了這個元素然後重新創建它,它會銷燬事件監聽器,但可能不會重新創建它;我不確定,但通過使用'live()'而不是'click()'完全可以避免這個問題。 – 2012-04-20 20:24:28

+0

哦,好吧..非常感謝您的快速解答! :)我試着用jQuery中.live()的例子,這個工作正常:$(「a.offsite」)。live(「click」,function(){alert(「Goodbye!」);}) ;所以,再次感謝你! :) – Chris 2012-04-20 20:28:24

3

使用click將在元素被調用時創建一個事件監聽器。如果該元素在click被調用時不存在,則不會創建偵聽器。您需要使用on(或舊版jQuery中的delegate)使用事件委託。

看看on documentation並閱讀有關委派。你需要像這樣:

$("<selector of static ancestor>").on("click", "#clickme" , function(){}) 
+0

對不起,如果我不明白......在你的例子中,詹姆斯,<靜態祖先的選擇者>是什麼? – Chris 2012-04-20 20:23:43

+0

這是一個不是動態加載的'#clickme'的祖先元素的選擇器。有些元素在負載中。如果沒有別的,它可以是「文件」,但更喜歡某些更具體的東西。 – 2012-04-20 20:32:24