2009-11-25 101 views
55

我正在使用散列鏈接的onclick事件作爲彈出窗口打開<div>。但是中間點擊不會觸發onclick事件,但只會獲取鏈接的href屬性值並將該URL加載到新頁面中。我如何使用中間點擊來打開<div>作爲彈出窗口?使用中點擊觸發onclick事件

+13

我還是不明白問題如何解決,當中間點擊不會觸發onclick事件。 – 2013-08-31 14:45:14

+1

@TomášZato瀏覽器不會通過中點擊觸發'點擊'事件,但他們可能會觸發'mouseup'事件。然後,JavaScript框架可能會將此綁定到「點擊」操作以混淆你。我推薦閱讀http://www.unixpapa.com/js/mouse.html – rds 2013-09-18 18:29:55

回答

53

請求的答案是正確的,但它聽起來像要防止中間點擊的默認操作。在這種情況下,請包括以下內容

$("#foo").on('click', function(e) { 
    if(e.which == 2) { 
     e.preventDefault(); 
     alert("middle button"); 
    } 
}); 

preventDefault()將停止事件的默認操作。

+18

請記住,'.live'已被棄用,並且被'.on'所取代。 – Neal 2013-07-16 15:29:40

+5

在firefox中無效 – 2014-11-17 10:52:17

+0

要在FF中使用此工作,請執行以下操作:var evt = e || window.event; – 2015-09-04 06:23:28

19

您可以使用

event.button

,以確定被點擊哪一個鼠標按鍵。

返回一個整數值,指示更改狀態的按鈕。

  • 0標準的「點擊」,通常左鍵
  • 1中間的按鈕,通常車輪單擊
  • 2右鍵,通常用鼠標右鍵單擊

注意,這個慣例在Internet Explorer中未遵循:有關詳細信息,請參閱 QuirksMode。

根據指針設備的配置方式,按鈕的順序可能不同。

又讀

Which mouse button has been clicked?

有兩個屬性尋找 出哪一個鼠標按鍵一直 點擊:這和按鈕。請注意0​​這些屬性並不總是 工作在點擊事件上。爲了安全 檢測鼠標按鈕,你必須使用 mousedown或mouseup事件。

+3

我建議使用'event.which',因爲它已經在jQuery源代碼中的瀏覽器中標準化了 - 第2756行 - if(! (event.button&2?3:(event.button&4?2:0)));' – 2009-11-25 10:04:51

+1

@RussCam但是, 'MouseEvent.which'沒有在任何規範中定義,而是'MouseEvent。按鈕「在DOM L2事件中定義。 – Oriol 2015-01-12 02:41:23

+0

@Oriol正確,但在不同的瀏覽器供應商中的實現方式不同。 OP用jQuery標記了問題,所以我建議使用'event.which',但應該詳細說明'MouseEvent.which'不是官方規範的一部分。 – 2015-01-12 02:52:24

6

jQuery提供在從左至右爲1,2,3,在這種情況下,你要給人的點擊按鈕的ID的事件.which屬性2

用法:

$("#foo").live('click', function(e) { 
    if(e.which == 2) { 
     alert("middle button"); 
    } 
}); 

的adamantium的回答也將工作,但需要注意IE,他指出:

$("#foo").live('click', function(e) { 
    if((!$.browser.msie && e.button == 1) || ($.browser.msie && e.button == 2)) { 
    alert("middle button"); 
    } 
}); 

還記得.button屬性是0索引而不是1索引像.which

+0

我可以覆蓋mozilla瀏覽器的功能! 例如,在左鍵單擊它打開彈出.... 但中間點擊它不是打開一個彈出窗口,並打開一個新的標籤,彈出不打開..所以我想重寫中間點擊mozilla的功能.... – 2009-11-25 10:32:14

+0

Mozilla有一個設置,可以在新選項卡中打開所有彈出窗口,而不是在新窗口中打開。如果用戶啓用了此選項,那麼我不認爲*有任何可以做的事情。如果這不是正在發生的事情,你可以發佈一些代碼或鏈接到問題頁面? – beggs 2009-11-25 11:56:29

+0

它不適用於FF中的單擊事件。 – l00k 2015-12-18 23:09:37

6

正確的方法是使用.on,爲.live已經從jQuery的棄用,然後刪除

$("#foo").on('click', function(e) { 
    if(e.which == 2) { 
     e.preventDefault(); 
     alert("middle button"); 
    } 
}); 

或者,如果你想在「現場」般的感覺和#foo不在網頁上文件開始:

$(document).on('click', '#foo', function(e) { 
    if(e.which == 2) { 
     e.preventDefault(); 
     alert("middle button"); 
    } 
}); 

original answer

3

我知道我遲到了派對,但對於那些在處理中間點擊時仍然有問題的人,請檢查您是否委派了該事件。在委派的情況下,click事件不會觸發。比較:

這適用於中間點擊:

$('a').on('click', function(){ 
    console.log('middle click'); 
}); 

這並不適用於中點擊工作:

$('div').on('click', 'a', function(){ 
    console.log('middle click'); 
}); 

如果您仍然需要使用跟蹤中間點擊事件代表團,如相應的jQuery ticket中所述的唯一方法是使用mousedown或01改爲。像這樣:

這適用於委託中間點擊:

$('div').on('mouseup', 'a', function(){ 
    console.log('middle click'); 
}); 

See it online here

4

這個問題是有點老了,但我找到了解決辦法:

$(window).on('mousedown', function(e) { 
    if(e.which == 2) { 
     e.preventDefault(); 
    } 
}); 

瀏覽器不火的「點擊」事件鼠標滾輪

在FF和Chrome

工作
5

我通常當人們提供替代方案而不是解決方案時討厭,但是由於已經提供瞭解決方案,我將打破我自己的規則。

中間點擊功能被覆蓋的網站往往真的,真的讓我煩惱。我通常是中間點擊,因爲我想在新標籤中打開新內容,同時對當前內容進行無障礙視圖。任何時候,您都可以單獨保留中間點擊功能,並通過單擊元素的HREF屬性使相關內容可用,我堅信您應該這樣做。