2010-10-24 42 views
13

檢查出我的jsfiddle demo,如果e.which == 1那麼當你左鍵單擊H2它將 e.which == 2e.which == 3那麼它不會工作。 2是鼠標中鍵,3是鼠標右鍵。我也發現這個:jQuery的:檢測如果點擊中間或鼠標右鍵,如果是的話,這樣做:

JQuery提供了一個e.which屬性,分別爲左,中,右分別返回1,2,3。所以你也可以使用if(e.which == 3){alert(「right click」); }

這個代碼不工作:

代碼:

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

回答

23

您可能想要捕獲mousedown事件,並且還需要防止oncontextmenu事件停止右鍵單擊事件期間的上下文菜單。

$("h2").live('mousedown', function(e) { 
    if((e.which == 1)) { 
    alert("left button"); 
    }if((e.which == 3)) { 
    alert("right button"); 
    }else if((e.which == 2)) { 
     alert("middle button"); 
    } 
    e.preventDefault(); 
}).live('contextmenu', function(e){ 
    e.preventDefault(); 
}); 
+0

是啊,我發現'contextmenu'是覆蓋內置菜單的好方法。但是,也許你的第一個功能可能包括它,而不是最終加以解決。我不確定他爲什麼使用live,但我會使用'.bind('mousedown contextmenu',function ...' – Mottie 2010-10-24 12:24:13

+0

lol!@fudgey我也總結他爲什麼在使用window.ready和just但是我總是有他的理由,但是關於這個問題,它會在if語句中執行兩次任何代碼時使用它。 – burntblark 2010-10-24 13:48:42

+0

實際上它只是我複製的一段代碼,所以我不知道爲什麼我'm使用.live ...哈哈,好的,所以我會與我上面的工作,但你認爲有更好的東西嗎?我將使用'.bind('mousedown contextmenu',函數' – 2010-10-24 14:43:04

2

我注意到在過去的有些古怪的地方使用click事件任何東西,但定期左鍵點擊。我不記得細節,但如果你改變「點擊」到「mousedown」或「mouseup」,你應該有更好的結果。

+0

你說得對,點擊不工作,但鼠標按下工程檢測中,右按鍵 – gideon 2010-10-24 09:14:12

1

現在button已經搞砸了面目全非。根據W3C其值應爲:

  • 左鍵 - 0
  • 中間按鈕 - 1
  • 右按鈕 - 2

根據微軟自己的價值觀應該是:

  • 左鍵 - 1
  • 中鍵 - 4
  • 右按鈕 - 2

毫無疑問,微軟模式比W3C的更好。 0應該表示「沒有按鈕被按下」,其他任何事情都是不合邏輯的。

http://www.quirksmode.org/js/events_properties.html

+0

[jQuery規範化跨瀏覽器一致性的以下屬性:...'which'](http://api.jquery.com/category/events/event-object/)。更好地使用'which'而不是'button'。 – Pang 2016-05-09 10:20:00

相關問題