2014-01-20 179 views
6

我所見過的關於如何在JavaScript中檢測鼠標中點擊的問題都與jQuery有關,但我想知道如何使用普通JavaScript檢測鼠標中鍵的點擊。我嘗試使用onClick(),但它似乎只適用於鼠標左鍵。如何檢測鼠標中鍵點擊?

是否有JavaScript函數可以檢測到鼠標左鍵和鼠標中鍵的點擊,如果沒有,可以檢測鼠標中鍵的點擊?

我問的原因是我想在單擊鏈接時進行函數調用,而不管是否使用了鼠標左鍵或鼠標中鍵。

+0

後前搜索:http://stackoverflow.com/questions/5833928/jquery-alert-when-middle-mouse-button-clicked )。 對不起,內特,我還沒有好好收穫! –

+1

http://www.thonky.com/javascript-and-css-guide/detect-mouse-button/ – sinisake

+1

@ Gaucho_9在譴責之前閱讀問題;-)我試圖弄清楚是否有可能跟蹤中老鼠按鈕點擊*沒有* jQuery。 – Nate

回答

8

onclick不綁定到鼠標,而是綁定到目標元素本身。

下面是如何檢測的元素是否是中間點擊:

document.body.onclick = function (e) { 
    if (e && (e.which == 2 || e.button == 4)) { 
    console.log('middleclicked') 
    } 
} 
+1

我已經添加了另一個示例,您可以傳入其他參數。注意函數本身是如何返回一個函數的,隱含的「e」位於封裝函數的調用堆棧上。我通常不會遇到上下文來解釋這種語法。感謝您的機會,尤其是不使用jQuery! – Schien

+0

@fiatjaf感謝您編輯答案。只是想指出編輯將onclick事件附加到document.body,而我的答案附加到特定的dom節點。編輯會顯着改變我的答案。由於OP已經得到了他的答案,所以我不介意在這一點上是否恢復編輯。 – Schien

+0

對於大編輯,我很抱歉,但StackOverflow並不是一個註定只回答提問的特定人員的網站,而是一個關於如何編寫代碼的大百科全書。我認爲,你的答案在其他地方不容易找到有用的信息,但它令人困惑。我的編輯是爲了讓未來的人們閱讀這個問題更有用,更容易閱讀。如果您認爲有問題,請重新編輯。 – fiatjaf

1

你必須檢測事件2

event = event || window.event; //make sure to pass the event into the function 
if (event.which == 2) { 
    //do code.. 
} 
1

下面的代碼可以幫助你。它可以檢測用戶點擊了哪個鼠標按鈕。 e.which == 2用於中間按鈕。

<script type="text/javascript"> 

function detect_button(e){ 
    e = e || window.event; 

    if (e.which == null){ 
     button = (e.button < 2) ? 'left' : ((e.button == 4) ? 'middle' : 'right'); 
    } 
    else{ 
     button = (e.which < 2) ? 'left' : ((e.which == 2) ? 'middle' : 'right'); 
    } 

    alert(button); 
} 

</script> 
+5

如果您要複製從評論鏈接的代碼,請至少先解釋它。 –

0

你必須使用已經內置到DOM和JavaScript引擎,然後把在情況下,瀏覽器不同的東西(這就是爲什麼jQuery是通常使用)。

document.getElementById("myBtn").onclick = function(event) { 
    event = event || window.event 

    // Now event is the event object in all browsers. 

    // Note: event.target - the reference to clicked element. IE uses event.srcElement 
    // In W3C there is a button property which works same in all browsers except IE: 
    // 0 - left button, 1 - middle button, 2 - right button 
    // For IE, left button = button & 1 (the 1st bit) is set to 1 
    // right button = button & 2 (the 2nd bit) is 1 
    // and middle button = button & 4 (the 3rd bit) 
    var left = event.button == 0 || 1 == event.button&1; 
    var middle = event.button == 1 || 1 == event.button&2; 
    var right = event.button == 2 || 1 == event.button&3; 

    // Put your code here 
} 
+1

'event.button == 1'也會觸發'1 == event.button&1'。所以這段代碼被破壞了。 – Vadzim

+0

好抓!所以你需要把它包裝在IE部分和非IE部分。 – disrvptor