【问题标题】:JS: detect right click without jQuery (inline)JS:检测没有 jQuery 的右键单击(内联)
【发布时间】:2012-02-29 14:19:11
【问题描述】:

我正在调用一个函数,它会构建一个包含多个链接的表。

我想检查一个链接是用鼠标左键还是右键单击的。

我尝试将以下部分添加到<a> 超链接。

onmousedown="function mouseDown(e){
switch (e.which) {
   case 1: alert('left'); break;
   case 2: alert('middle'); break;
   case 3: alert('right'); break; }
}"

但是如果我点击一个链接,什么都不会发生。

【问题讨论】:

  • 不要使用内部事件处理程序属性。改用 DOM 事件绑定。
  • 我试过了,但对我不起作用。可能是因为表格稍后加载(并没有出现在渲染页面的源代码中)

标签: javascript right-click mousedown


【解决方案1】:

html:

<a href="#" onmousedown="mouseDown(event);">aaa</a>​​​​​​​​​​​​​​​​​​​​​​​​​​​

javascript:

function mouseDown(e) {
  e = e || window.event;
  switch (e.which) {
    case 1: alert('left'); break;
    case 2: alert('middle'); break;
    case 3: alert('right'); break; 
  }
}​

demo

【讨论】:

  • 我很确定取决于全局事件对象使这个 IE-only
  • chrome:是,firefox:否,IE9:否:\
  • 有点讽刺意味的是,Chrome 正在实施反功能以兼容仅 IE 的网站,同时 IE 正在删除它们。
  • @Quentin 修复了答案,使用 jQuery 让我想念这样的事情。
  • 我用 IE 试过了,我得到了“e”,但里面没有 keycodekeycode0,但 button 有值。我认为,这是 IE 特定的“keycode”,因为它始终是相同的数字(左键单击:1,中键单击:4,右键单击:2)。这是正确的吗?
【解决方案2】:

这是对 xdazz 答案的修改,它支持使用 e.button 的浏览器,对值进行规范化,并将其存储在 e.which 中。添加的行是在 JQuery 库中使用的。

function mouseDown(e) {
  e = e || window.event;
  if ( !e.which && e.button !== undefined ) {
    e.which = ( e.button & 1 ? 1 : ( e.button & 2 ? 3 : ( e.button & 4 ? 2 : 0 ) ) );
  }
  switch (e.which) {
    case 1: alert('left'); break;
    case 2: alert('middle'); break;
    case 3: alert('right'); break; 
  }
}​

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 2020-04-04
    相关资源
    最近更新 更多