2012-06-25 130 views
39

返回false我點擊設置像這樣的活動:從jQuery的單擊事件

$('.dialogLink') 
    .click(function() { 
     dialog(this); 
     return false; 
    }); 

的都有一個「返回false」

誰能解釋這是什麼一樣,如果它需要的?

回答

75

當您從事件處理程序返回false時,它會阻止該事件的默認操作並阻止事件在DOM中冒泡。也就是說,它是這樣做的相當於:

$('.dialogLink') 
    .click(function (event) { 
     dialog(this); 
     event.preventDefault(); 
     event.stopPropagation(); 
}); 

如果'.dialogLink'<a>元素然後點擊它的默認操作爲導航到href。從點擊處理程序返回false可以防止這種情況發生。

至於是否需要你的情況,我猜測答案是肯定的,因爲你想顯示一個對話框來響應點擊而不是導航。如果您放置點擊處理程序的元素在點擊時沒有默認操作(例如,當您單擊div時通常沒有任何反應),那麼您無需返回false,因爲沒有任何要取消的操作。

如果您想對點擊做出響應,但讓默認導航繼續,則不要返回false。

延伸閱讀:

+0

如果我將這兩個事件編碼到對話框中,它會是一樣的嗎? – Alan2

+1

這兩行不是事件,它們是對'event'對象的方法的調用,您會注意到我已將其作爲參數添加到函數中。 jQuery將該參數設置爲與發生任何事件相關聯的'event'對象。如果您將'event'對象傳遞給'dialog()'函數,那麼它可以調用這些方法,但是我認爲如果直接在顯示它的位置執行,它會更易於維護。話雖如此,我建議你堅持你已經擁有的'return false':它更短。 – nnnnnn

+0

作爲剛剛遇到這個問題並花了一點時間才意識到發生了什麼的人,我認爲調用'return false'不如說要阻止默認並停止傳播。 – aug

3

事件處理程序的返回值決定了默認瀏覽器的行爲是否應該發生爲好。在點擊鏈接的情況下,這將在鏈接之後,但在表單提交處理程序中差異最明顯,如果用戶輸入信息時出現錯誤,您可以取消表單提交。

我不相信這是一個W3C規範。像這樣的所有古老的JavaScript接口都被賦予了暱稱「DOM 0」,並且大部分是未指定的。閱讀舊的Netscape 2文檔可能會有一些運氣。

實現此效果的現代方法是致電event.preventDefault(),這在DOM 2 Events specification中有詳細說明。

所以正確的方法是:

$('.dialogLink') 
    .click(function (e) { 
     dialog(this); 
     e.preventDefault(); 
     e.stopPropagation(); // Stop bubbling up 
}); 
+0

你提到「現代」的方式,但如果它是一樣的,它不是更好的代碼返回false並保存從腳本中的一些字節:-) – Alan2

+0

如果它是一個jQuery事件處理程序,你可以肯定'返回false'將做這項工作。 – nnnnnn

+0

同意@nnnnnn。 –

0

事件處理程序的返回值決定了默認瀏覽器的行爲是否應該發生爲好。在點擊鏈接的情況下,這將在鏈接之後,但在表單提交處理程序中差異最明顯,如果用戶輸入信息時出現錯誤,您可以取消表單提交。