如何在所有浏览器中生成右键单击事件

4

一些背景信息:
我正在开发的应用程序在屏幕上的某些对象上有一个右键上下文菜单。目前的设计是每个这些对象都监听右键点击事件,发送 AJAX 请求以获取该对象的上下文数据,使用该数据创建一个来自 Dojo 0.4.3 的 PopupMenu2,然后生成右键点击以启动 Dojo 菜单。

我正在尝试找到一种方法来为所有浏览器生成右键点击事件。目前,我们仅支持 IE 并使用 oncontextmenu 事件。

限制条件:

  • 没有 jQuery :(
  • 我不能预加载屏幕上所有对象的数据以创建 Dojo 菜单并避免 AJAX 请求。

2
http://www.harelmalka.com/rightcontext/ - powtac
1
+1 开始一个关于右键点击事件的问题时加入 "一些背景信息" - Troubadour
我很高兴有人注意到了这个! - ntownsend
@powtac 感谢提供链接,但这并没有真正回答我的问题。我正在寻找一种以编程方式生成右键单击事件的方法,而不是捕获“真实”的右键单击事件并对其进行处理。 - ntownsend
1个回答

4

以下内容可以帮助您生成右键单击事件。关键在于button参数:button = 2。

if (document.createEvent) {
  var rightClick = document.createEvent('MouseEvents');
  rightClick.initMouseEvent(
    'click', // type
    true,    // canBubble
    true,    // cancelable
    window,  // view - set to the window object
    1,       // detail - # of mouse clicks
    10,       // screenX - the page X coordinate
    10,       // screenY - the page Y coordinate
    10,       // clientX - the window X coordinate
    10,       // clientY - the window Y coordinate
    false,   // ctrlKey
    false,   // altKey
    false,   // shiftKey
    false,   // metaKey
    2,       // button - 1 = left, 2 = right
    null     // relatedTarget
  );
  document.dispatchEvent(rightClick);
} else if (document.createEventObject) { // for IE
  var rightClick = document.createEventObject();
  rightClick.type = 'click';
  rightClick.cancelBubble = true;
  rightClick.detail = 1;
  rightClick.screenX = 10;
  rightClick.screenY = 10;
  rightClick.clientX = 10;
  rightClick.clientY = 10;
  rightClick.ctrlKey = false;
  rightClick.altKey = false;
  rightClick.shiftKey = false;
  rightClick.metaKey = false;
  rightClick.button = 2;
  document.fireEvent('onclick', rightClick);
}

我建议您在Mozilla和MSDN网站上搜索“document.createEvent”和“document.createEventObject”,以了解更多API的详细信息。希望这可以帮助您!

这个应该在10,10处弹出本地浏览器上下文菜单吗?但是对我来说没有弹出! - EoghanM

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