如何使用JavaScript拦截鼠标的各种按键?

时间:2013-07-08 12:39:53

标签: javascript html mouse mouseevent

我工作的网络应用程序是在只存在2键鼠标的时期设计和开发的。现在我们市场上有超过3键鼠标,所有这些额外按钮在使用我们的应用程序时都会造成严重破坏。

我的目的是让用户只按下鼠标左键并禁用鼠标上的所有其他按钮。既然,我无法访问用户的系统,我必须通过浏览器本身(可能通过使用JavaScript)以某种方式实现这一点。

我该如何解决这个问题?任何指针都会非常有用。

3 个答案:

答案 0 :(得分:1)

W3C事件模型足以通过event object传递鼠标信息。这意味着您实际上可以阅读单击了哪个鼠标按钮。实施例

document.body.addEventListener('click', function( event ) {
    console.log('mouse button clicked: ', event.which);
}, false);

使用该信息,只允许左键单击,这些信息由值1表示。

document.body.addEventListener('click', function( event ) {
    if( event.which === 1 ) {
        // do something
    } else {
        event.stopPropagation();
        event.preventDefault();
    }
}, false);

答案 1 :(得分:1)

这取决于浏览器和文档模式。

这是我们调整prototype.js按钮图以适用于所有浏览器的方式。在docmode中包含IE10< 9。

function _isButtonForDOMEvents(event, code) {
        return event.which ? (event.which === code + 1) : (event.button === code);
    }

    //var legacyButtonMap = { 0: 1, 1: 4, 2: 2 };
    function _isButtonForLegacyEvents(event, code) {
        switch (code) { //Fix where IE10 in DocMode lt9 caused isLeftClick to fail
            case 0: return event.button == 0 || event.button == 1;
            case 1: return event.button == 4;
            case 2: return event.button == 2;
            default: return false;
        }
    }

    function _isButtonForWebKit(event, code) {
        switch (code) {
            case 0: return event.which == 1 && !event.metaKey;
            case 1: return event.which == 2 || (event.which == 1 && event.metaKey);
            case 2: return event.which == 3;
            default: return false;
        }
    }

答案 2 :(得分:0)

  

我认为这是最接近禁用按钮的方法

document.addEventListener('click', function( e ){
    if(e.which === 2 || e.which === 3) { // 2 = middle scroll button ||  3 = right click
        e.preventDefault();
        e.stopPropagation();
        return false;
    }
});
  

如果它不起作用,您可以尝试'keydown'或'keyup'

,而不是点击