【问题标题】:Can't use jquery's click event handler to detect right click无法使用 jquery 的单击事件处理程序来检测右键单击
【发布时间】:2011-09-08 04:30:07
【问题描述】:

在尝试使用 jquery 检测鼠标右键单击时,我注意到 click 事件处理程序似乎不会被鼠标右键单击触发,而 mousedown 或 mouseup 事件处理程序会触发。

例如,右键单击测试 div 后,以下警报“正在测试!”:

$('#test').mousedown(function(e) {
    alert('testing');
});

但是,不是

$('#test').click(function(e) {
    alert('testing!');
});

有人知道为什么吗?

【问题讨论】:

  • 这应该会给你答案:stackoverflow.com/questions/1206203/…
  • 在 Firefox 中,$(elem).click(...) 既不会检测到鼠标中键也不会检测到鼠标右键。在 Chrome 中,中间有效,但右边无效……另外,请注意之前
  • @Stefan H - 不,我已经阅读了那篇文章,不幸的是没有一个答案能解决我的问题。
  • 附带说明 - 第二个警报中还有一个语法错误应该是 alert('testing!');注意缺少撇号

标签: javascript jquery event-handling right-click


【解决方案1】:

当你按下鼠标时,即使被解雇了event.which

取自这里:How to distinguish between left and right mouse click with jQuery

$('#element').mousedown(function(event) {
    switch (event.which) {
        case 1:
            alert('Left mouse button pressed');
            break;
        case 2:
            alert('Middle mouse button pressed');
            break;
        case 3:
            alert('Right mouse button pressed');
            break;
        default:
            alert('You have a strange mouse');
    }
});

因此,不要使用 .click(),而是使用 mousedown 并检查案例。

【讨论】:

  • -1 - Stephen H 已经向我推荐了该帖子,但我说那没有帮助。我的问题是为什么我需要使用 mousedown 而不是单击(我已经知道这是一个解决方案)。
  • @Wes - 但是“点击”是 mousedown plus mouseup - 即使鼠标从元素上移开并在向下和向上之间再次打开因为它关闭时没有 mouseup,所以只捕获 mousedown 本身就完成了一半的工作。有一个现有的鼠标右键 jQuery 插件:abeautifulsite.net/blog/2008/05/jquery-right-click-plugin
【解决方案2】:

正如article 所说:

任何浏览器中的右键单击都没有 click 事件。

因此,在大多数浏览器中,您只剩下 mousedownmouseup

【讨论】:

  • 啊哈,有道理,感谢您的文章。所以另一种说法是:鼠标右键不会触发点击事件(只有 mousedown 和 mouseup 事件)。
  • 这篇文章不太准确,因为 Firefox(也许还有 IE?)会触发绑定在 document 上的右键单击事件。
【解决方案3】:

不确定您使用哪种浏览器进行了测试,但根据 MSDN,onclick 会在“当用户单击 left 鼠标按钮时”触发。即,根据定义,右键(或中间)点击不会发生。鉴于 MSDN 上的规定,无论其他浏览器做什么,您都可以期望 IE 以这种方式运行。

(Onclick 也会触发某些非鼠标事件,例如使用键盘更改某些表单元素等)

我知道 jQuery 试图规范浏览器之间的行为,但如果浏览器根本不触发事件...

据我所知,至少有一个 jQuery 插件实现了右键单击:http://abeautifulsite.net/blog/2008/05/jquery-right-click-plugin/(我没用过,但它看起来不错,只是它指出 Opera 不支持它)。

【讨论】:

    【解决方案4】:

    我还尝试了以下代码来捕获特定类元素的鼠标右键

    $(".brick").mousedown(function (event) {
                if (event.which === 3) {
                    currentRightClickedTileID = $(this).attr("id");
                }
            });
    

    这段代码并不总能抓住右键。

    【讨论】:

      猜你喜欢
      • 2013-08-06
      • 1970-01-01
      • 1970-01-01
      • 2014-01-03
      • 2022-01-24
      • 2015-12-22
      • 1970-01-01
      • 2017-10-03
      • 1970-01-01
      相关资源
      最近更新 更多