以下是我看到的與Chrome和FF中的中點擊和click
事件相關的JSFiddle行爲。爲什麼在幾種情況下中鍵不會觸發'點擊'?
「點擊」有點兒八九不離十工作
方法1:直接綁定click
處理到a
元素和中間點擊將引發Chrome的處理程序,但不是在FF。
$('div a').on('click', function(ev) {
// middle click triggers this handler
});
方法2:綁定委派click
處理程序,其包含一個或多個a
一個div
。中點擊將而不是在Chrome或FF中觸發此處理程序。
$('div').on('click', 'a', function(ev) {
// middle click doesn't trigger this handler
});
這種做法是極其寶貴的,如果格開始是空和a
元件通過AJAX調用後填寫,或因爲一些用戶輸入的結果。
「鼠標鬆開」工作
使用mouseup
代替click
導致了兩個方法1和2在這兩個瀏覽器。
// Approach 1 w/ mouseup
$('div a').on('mouseup', function(ev) {
// middle click **does** trigger this handler in Chrome and FF
});
// Approach 2 w/ mouseup
$('div').on('mouseup', 'a', function(ev) {
// middle click **does** trigger this handler in Chrome and FF
});
這裏的JSFiddle與mouseup
。
這很有趣,在某些情況下可能會有用,因爲mouseup
幾乎是click
。但是mouseup
不是click
,而我之後的行爲是click
。我不想創建click
的模擬mousedown; setTimeout; mouseup
。
我敢肯定,答案是「不」,但是有沒有一個跨瀏覽器的方式來導致中鍵單擊觸發click
處理程序?如果不是,原因是什麼?
我很感謝你的回答,但是我在「我不想創建hacky'mousedown; setTimeout; mouseup'模擬'click'」這個問題上做了陳述。重新點擊看起來似乎是一個壞主意,但我會再次權衡利弊。 – mwcz
我在回答中指出,這是獲取中間按鈕點擊的唯一可靠方法,因此沒有其他選擇。 – adeneo
是否需要使用===比較而不是==?爲什麼?謝謝。 –