2009-08-15 59 views
2

這裏是我的代碼片段:JQuery的。點擊()事件困擾

$(".item").click(function() { 
     alert("clicked!"); 
    }); 

而且我有(只是假設,實際上它更復雜的)我的網頁上執行以下操作:

<a href="#" class="item"><img src="1.jpg" /></a> 

但是,當我點擊圖片時,我沒有收到警報。

我的錯誤是什麼?

+0

您的真實代碼是否在'$(document).ready()'內? – 2009-08-15 23:59:23

+0

是的,這是 - 我也有其他的代碼工作和執行。 – Isaac 2009-08-16 19:59:06

回答

4

第一個問題 - 您是否添加了要動態點擊的元素?如果是這樣, 您應該使用實時事件,因爲這會照顧動態創建的元素。

http://docs.jquery.com/Events/live#typefn

+0

我動態地添加事件的事實是問題 - 我最終通過在成功函數內調用函數添加項目之後顯式調用函數來修復它。 謝謝! – Isaac 2009-08-17 22:34:17

0

使用綁定。 (「。item」)。bind(「click」,function(e){...});

+0

這不起作用。 – Isaac 2009-08-15 23:52:08

+0

如果不是這樣,那麼其他地方就有問題了。 http://docs.jquery.com/Events/bind#typedatafn – Shaun 2009-08-15 23:57:05

+1

'.bind('click',fn)'和'.click(fn)'是等價的。實際上'.click()'使用'.bind('click',fn)'。如果你想親自看看,請查看jQuery 1.3.2的第3099行,非壓縮,非縮減的源代碼。 – dcharles 2009-08-16 00:19:29

5

您的選擇器實際上是否匹配任何東西?嘗試使用jQuery插件調試(http://jquery.glyphix.com/)和這樣做:

$(".item").debug().click(function() { 
    alert("clicked!"); 
}); 

的.debug()將記錄無論是匹配Firebug控制檯(您正在使用螢火蟲吧:-)?)沒有「打破鏈「所以你可以像這樣內聯使用它。

如果結果正確,在瀏覽器導航到「#」之前可能會出現一些問題,然後才能顯示警報。嘗試在事件對象上使用.preventDefault()方法來防止此行爲:

$(".item").click(function(evt) { 
    evt.preventDefault(); 
    alert("clicked!"); 
}); 
+0

事實證明,這也不是工作...也許我應該附上我的所有代碼和XHTML? 此外,似乎(當我查看源代碼時)動態添加的HTML(通過JQuery的AJAX)實際上並不在源代碼中,但可通過Firebug或Safari的檢查器查看。我不確定這是否正常。 – Isaac 2009-08-16 20:18:35

+1

您的代碼段( )正在動態加載?如果這是非常重要的信息! – 2009-08-16 20:33:27

+0

它正在動態添加,我真的沒有意識到這是重要的。我剛接觸Javascript,幾天前纔開始使用它。爲什麼這會改變$ .click()的工作方式?這似乎對我來說是有害的,但我想這個.click()只會綁定在文檔爲.ready()時加載到DOM中的對象。因此,使用live()或在項目加載後顯式調用click()函數是一個修復。謝謝你們! – Isaac 2009-08-18 20:42:14

0

修改選擇器?

$( 「項目> IMG」)

+0

沒有骰子。我不認爲問題是與選擇器(我已經嘗試了很多)。 – Isaac 2009-08-16 20:20:38

0

我添加上下文菜單的jQuery插件後,近日有這個問題。該插件綁定到正文的click事件,然後解除綁定click事件 - 它似乎刪除所有元素的所有綁定以單擊事件。也許建議關閉插件或檢查你是不是自己解除綁定點擊父元素。

0

你已經發布的代碼是正確的,所以我懷疑還有別的事情,你有沒有考慮過。首先,如果某處出現錯誤(即使不在該確切位的代碼中),可能導致其停止工作。在此行後面加上一個警報,檢查它是否運行。

檢查沒有其他元素捕捉事件並阻止它傳播。這在過去曾經讓我感到困擾......如果還有其他事情處理了其中有stopPropagation()return false的點擊,那可能是問題所在。

0

我發現的一件事(儘管只有鏈接去其他地方)是添加返回false;可能會有所幫助,如果它只是關閉錨而不是評估警報。我無法真正說出爲什麼會出現這種情況,但這是我近期發現的一個類似問題的解決方案。