2011-04-17 14 views
0

我收到一個jQuery事件處理程序的意外行爲。它與這個問題中討論的問題非常相似:Why does my jQuery event handler fail when attached to multiple elements?什麼導致jQuery事件處理程序以靜默方式失敗? (奇怪的jQuery行爲)

基本上,一個簡單的例子是,我的頁面調用

$(document).ready(function(){ 
     $('a.submit').click(function(e){ 
       e.preventDefault(); 
       alert(this.href); 
     }); 
    }); 

假設標記是:

<html> 
    <body> 
     <a href="url1" class="submit">text1</a> 
     <a href="url2" class="submit">text2</a> 
     <a href="url3" class="submit">text3</a> 
    </body> 
</html> 

與除了最後一個引發事件提交類的鏈接全部。與頁面上的最後一個鏈接.submit未連線到事件處理程序。替換click(fn)live('click',fn)的作品。

我的問題是我不明白爲什麼原始處理程序失敗。所有鏈接都在同一時間呈現,並且我正在將我的處理程序訂閱包裝在$(document).ready()中,其中應該確保DOM已加載。

我需要弄明白這一點,因爲我有一個更復雜的情況,其中處理程序深入註冊一個縮小的JavaScript文件,所以如果我能夠理解如何防止此錯誤而不是修復它時會非常有幫助它發生。

還有一點需要注意的是,我在Firefox,Chrome和IE中收到了相同的奇怪行爲。我使用jQuery1.5.1

+1

我們需要看到html頁面,以及瞭解的問題。 – Bene 2011-04-17 17:54:56

+1

您的意思是否'$( '一.submit')'或'$( 'a.submit')' – 2011-04-17 17:57:20

+0

@Bene,假設它看起來像'text1text2text3 smartcaveman 2011-04-17 17:57:30

回答

0

考慮到你所提供的HTML:

<a href="url1" class="submit">text1</a> 
<a href="url2" class="submit">text2</a> 
<a href="url3" class="submit">text3</a> 

和JavaScript:

$(document).ready(function(){ 
     $('a.submit').click(function(e){ 
       e.preventDefault(); 
       alert(this.href); 
     }); 
    }); 

它必須工作。毫無疑問。然而,如果正在動態創建你的錨標記<a>,你不能直接點擊事件綁定到這些,但通過現場如

$('a.submit').on('click', function(e){ 
    //magic here 
}); 
+0

PS。你可以檢查jsfiddle:http://jsfiddle.net/naveed_ahmad/GL8qD/ – 2011-04-17 18:02:35

相關問題