JS:如何在不使用jQuery的情况下检测右键单击(内联)

6
我正在调用一个函数,该函数构建了一个包含多个链接的表格。
我想检查链接是否被右键或左键点击。
我尝试向超链接添加以下部分。
onmousedown="function mouseDown(e){
switch (e.which) {
   case 1: alert('left'); break;
   case 2: alert('middle'); break;
   case 3: alert('right'); break; }
}"

但是当我点击链接时,什么也没有发生。


不要使用内置的事件处理程序属性。改用DOM事件绑定。 - Quentin
我已经尝试过了,但对我没有起作用。也许是因为表格稍后加载(并且不会出现在呈现页面的源代码中)。 - Keith L.
2个回答

15

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; 
  }
}​

这是演示


2
我非常确定,依赖于全局事件对象会使其仅限于IE。 - Quentin
2
谷歌浏览器:是,火狐浏览器:否,IE9浏览器:否 :\ - Keith L.
4
有点讽刺的是,Chrome正在实施反功能以与仅支持IE的网站兼容,而IE却在同时删除这些功能。 - Quentin
请注意,在 [IE lt 9] 中,按钮分别为 1=左键,2=右键,4=中键。我已经使用了 e.button,在我尝试过的现代浏览器中似乎都可以工作(IE9、FF12、Chrome、Safari for Windows)。 - Matty K
<a href="#" onmousedown="mouseDown(event);">aaa</a> --> 事件变量从哪里来?它在mouseDown函数头中,但似乎它只是在这里出现在事件头中。如果您想要打印单击的X和Y坐标,该怎么办? - user3376708
显示剩余3条评论

4

以下是 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; 
  }
}​

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接