2010-10-03 92 views
0

我希望能夠編寫代碼來響應(seperately)以下事件:如何響應在Javascript中點擊鼠標按鈕?

  1. 右手點擊
  2. 左手點擊
  3. 中鍵點擊(可選 - 不錯的,但我不能沒有這個生活)。

有沒有在JavaScript中內置的方式,我可以響應這些事件,或者我需要使用一個庫(最好是jQuery的)?

回答

1
$('#your_element').mousedown(function(event) { 
    switch (event.which) 
    { 
     case 1: 
      // left mouse 
      break; 
     case 2: 
      // middle mouse 
      break; 
     case 3: 
      // right mouse 
      break; 
     default: 
      // some sort of bizarre mouse! fallback 
      break; 
    } 
}); 
+0

呵呵...這就是爲什麼我愛jQuery的! – skyeagle 2010-10-03 16:15:26

+0

@skyeagle - jQuery是一種典型的愛或恨它的場景。我喜歡它,因爲它有着出色的選擇器,因爲我不需要擔心跨瀏覽器的差異,就像在這個例子中,如果你想用'普通'的JavaScript編碼。 – chigley 2010-10-03 16:19:10

+4

需要注意的是,您在'mousedown'事件中所做的任何操作都將阻止大多數瀏覽器上的上下文菜單(例如,右鍵單擊)。如果提供了,你必須顯式掛接'contextmenu'事件。請參閱[David談到的]指南(http://stackoverflow.com/questions/3850498/how-to-respond-to-mouse-button-clicks-in-javascript/3850519#3850519)瞭解更多信息。例如:http://jsbin.com/anofi3 – 2010-10-03 16:24:13

3

怪癖模式有a decent guide,它更復雜,那麼它需要是由於瀏覽器的差異。

我需要使用庫(最好是jQuery)嗎?

JavaScript庫不能做任何你自己不能做的事情;他們只是更容易做一些事情。

1

這是我使用的功能:

var ieButtons = { "1": "left", "2": "right", "3": "leftright", "4": "middle" }; 

function getMouseButton(evt) { 
    if (typeof evt.which == "number") { 
     // Non-IE case. Works in everything apart from Opera < 8 
     return (evt.which < 2) ? "left" : 
      ((evt.which == 2) ? "middle" : "right"); 
    } else { 
     // IE case 
     return ieButtons[evt.button] || "unknown"; 
    } 
} 

document.onmousedown = function(evt) { 
    evt = evt || window.event; 
    window.alert(getMouseButton(evt)); 
}; 

月沃爾特的鼠標事件的文章似乎是小於知名他的一個關鍵事件,但一樣好,叩門怪異模式就相形見絀了:http://unixpapa.com/js/mouse.html

剛剛查看了jQuery代碼,它看起來好像正確地正確識別了事件的which屬性(左1,中2,右3),儘管沒有IE的很好的報告多個按鈕的功能。

-1

從MSDN:onclick event 從MSDN:button property

+0

這就是微軟特有的。所有三個較早的答案已經指出了跨瀏覽器解決方案。 – Quentin 2010-10-03 17:35:10

+0

你是對的,這是從微軟網站,我提到它與「從MSDN」的短語。我想也許它可以幫助他(甚至一點點)。 – syntaxcheck 2010-10-04 08:21:29