【问题标题】:Change mouse keycode - jquery更改鼠标键码 - jquery
【发布时间】:2012-07-11 19:32:32
【问题描述】:

正如我所听说的,不同的浏览器在mousedown 事件上为鼠标按钮分配不同的键码值。我在 Chrome 中尝试过 this 并且成功了:

$('a').mousedown(function(f) {
    if (f.which == 2) {
        alert("You clicked the wheel")
    }
})​

但是,我担心某些浏览器会无法识别鼠标滚轮的键码为 2,并将其与其他鼠标按钮混淆,从而导致代码崩溃。我的问题是是否有任何方法可以重置这些值,以便我可以使用我提供的新值,以便所有浏览器都知道这些数字究竟代表什么。

【问题讨论】:

    标签: javascript jquery events keycode mousedown


    【解决方案1】:

    根据 W3C,它的值应该是:

    • 左键 - 0
    • 中间按钮 - 1
    • 右键 - 2

    根据微软的说法,它的值应该是:

    • 左键 - 1
    • 中间按钮 - 4
    • 右键 - 2

    但是您不必考虑它(跨浏览器问题),将其留在jQuery,在每个浏览器中which 都会返回相同的结果

    $('a').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"); 
        }
    })​;
    

    DEMO.(在 IE、Chrome 和 FF 中测试)

    【讨论】:

      【解决方案2】:

      使用 jQuery,2 将代表鼠标滚轮或«中键单击按钮»。您无法更改这些值,但也不必更改,因为如果您在 f.which 上得到的不是 2,则很可能不是鼠标滚轮被击落。

      two mouse event models, one by the W3C and one by Microsoft浏览器(也包括IE7和IE8)实现the W3C standard

      更新

      在 Javascript 中,由于两种不同的标准,鼠标事件按钮没有被规范化。实际上,jQuery 规范了鼠标事件上的 which:

      // Add which for click: 1 === left; 2 === middle; 3 === right
      // Note: button is not normalized, so don't use it
      if ( !event.which && button !== undefined ) {
        event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
      }
      

      【讨论】:

      • @MaxArt 你看到我的jsfiddle了吗?在我的 chrome 浏览器中,它代表中间按钮。
      • @menislici 我更新了我的答案,jQuery 规范了事件。只是不得不以艰难的方式学习:)
      • @Beat Richartz 你是说我想做的事情已经被event.which 照顾了吗?
      • 令人难以置信的是,像 John Resig 这样的聪明人竟然不认可 Microsoft 的 event.button 方法,而是创建了另一种编码,这使得它更加混乱。但话又说回来,这是一场灾难,W3C 很久以前就必须解决这个问题。
      • 引用this link: «这是一个旧的网景财产。左键的值为 1,中键(鼠标滚轮)的值为 2,右键的值为 3。没有问题,除了它的微弱支持(以及它也用于按键检测的事实)。» W3C 方法的弱点是无法检测到左键与另一个键的组合,netscape 模型没有这个弱点。除此之外,对于 microsoft 模型,您必须问自己:1,4 和 2... 到底是什么?听起来他们想要很多。
      猜你喜欢
      • 2011-02-28
      • 1970-01-01
      • 2010-09-27
      • 1970-01-01
      • 2013-06-29
      • 2011-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多