2010-07-08 51 views

回答

3

有两个属性可以找出哪个鼠标按钮被点击:哪个和哪个按钮。请注意,这些属性并不总是适用于点击事件。要安全地检测鼠标按钮,您必须使用mousedown或mouseup事件。

这是一个旧的网景财产。左按钮给出1的值,中按钮(鼠标滚轮)给出2,右按钮给出3.没有问题,除了它微薄的支持(以及它也用于键检测的事实)。

现在按钮已被超过所有承认被玷污。根据W3C其值应为:

* Left button – 0 
* Middle button – 1 
* Right button – 2 

根据微软自己的价值观应该是:

* Left button – 1 
* Middle button – 4 
* Right button – 2 

毫无疑问,微软模式比W3C的更好。 0应该表示“没有按钮被按下”,其他任何事情都是不合逻辑的。

此外,只有在Microsoft模型中,按钮值才可以组合,所以5代表“左键和中键”。甚至连浏览器6都没有支持这一点,但在W3C模型中,这样的组合在理论上是不可能的:你永远不知道左边的按钮是否也被点击了。

在我看来,W3C在定义按钮时犯了一些严重的错误。 右击

幸运的是,您最常想知道是否点击了正确的按钮。由于W3C和微软就此达成一致,并给出了按钮值2,您仍然可以检测到右键单击。

function doSomething(e) { 
    var rightclick; 
    if (!e) var e = window.event; 
    if (e.which) rightclick = (e.which == 3); 
    else if (e.button) rightclick = (e.button == 2); 
    alert('Rightclick: ' + rightclick); // true or false 
} 

请注意,虽然Mac电脑只有一个鼠标按键,Mozilla的给出了一个按住Ctrl单击2按钮值,因为按Ctrl键单击也带来了上下文菜单。 iCab目前还不支持鼠标按键属性,但您仍然无法在Opera中检测到右键单击。

+0

格式化您的代码。 – 2010-07-08 08:33:30

+0

+1。体面的写作。可以在这里找到更长时间的讨论:http://unixpapa.com/js/mouse.html – 2010-07-08 08:35:07

+0

在这个+1的时候,在Chrome和IE/Firefox之间检查mouseover事件的'which'是不同的。绝对绑定到适当的mouseup/down事件以获得更高的准确性。 – Aesthete 2013-01-22 05:56:31

0

[jQuery的] [1]提到你怎么能在这里检测到鼠标按钮:点击任何 鼠标按钮时发送 http://api.jquery.com/mousedown/

MouseDown事件。要仅在特定按钮上执行 ,我们可以使用事件对象的哪个属性。并非所有的浏览器 支持此属性 (Internet Explorer使用按钮而是 ),但jQuery的规范了 属性,因此它是安全的 任何浏览器中使用。其中 的值将为1为左按钮,2为 中按钮,或3为右 按钮。