2008-12-08 71 views
4

我的繼承人鏈接:在「Facebox」框查找元素

http://tinyurl.com/6j727e

如果單擊test.php的鏈接,它在其中使用jQuery「facebox」一個模式對話框打開腳本。

我想在此框中點擊事件採取行動,如果你查看test.php的來源,你會看到我試圖loacte模態對話框中的鏈接。

$('#facebox .hero-link').click(alert('click!')); 

但是,它並沒有檢測到點擊奇怪的是click事件運行在頁面加載時。

的關閉按鈕但是都內置了一個click事件關閉對話框,我懷疑是被阻止我家種植的單擊事件莫名其妙,但我無法弄清楚。

任何人都可以幫忙嗎?通常,它是項目的最後一部分,它始終如一地支持我;)

回答

9

首先,您在文檔加載時獲得警報的原因是因爲#click方法採用函數作爲參數。相反,您向它傳遞了alert的返回值,該值立即顯示警報對話框並返回null。

原因事件綁定不工作是因爲在文檔加載時間,#facebox .hero-link還不存在。我認爲你有兩個選項可以幫助你解決這個問題。

選項1)僅在顯示facebox後綁定click事件。喜歡的東西:

$(document).bind('reveal.facebox', function() { 
    $('#facebox .hero-link').click(function() { alert('click!'); }); 
}); 

選項2)考慮使用該jQuery Live Query Plugin

實況查詢通過結合事件或解僱的回調匹配的元素自動神奇,即使在利用jQuery選擇的力量該頁面已被加載並更新了DOM。

當jQuery Live Query識別Facebox修改DOM時,會自動綁定click事件。然後,您應該只需要這樣寫:

$('#facebox .hero-link').click(function() { alert('click!'); }); 
+0

小心實況查詢,可以吃你的Web應用程序,如果你有大十歲上下的DOM,事件代表團一個更好的選擇,並沒有額外的插件開銷。 – redsquare 2008-12-08 19:38:39

+0

選項1爲我做了詭計;)非常感謝。 – 2008-12-09 09:16:18

1

或者使用事件代表團

這基本上掛鉤事件到容器,而不是每一個元素,並查詢容器事件的event.target。

它在你減少代碼的噪音(無需重新綁定),它也是瀏覽器的內存更容易多重利益(較少的事件在DOM綁定)

快速例如here

jQuery plugin方便事件代表團

PS事件代表團被寫入下一個版本(1.3),很快即將到來。