如何在JavaScript中模拟右键单击

9

好的,我知道可以通过运行以下代码来模拟点击:

document.getElementById('recover').click();

我发现最接近的东西是 cntextmenu,所以我尝试了。
document.getElementById('recover').contextmenu();

然而这并没有任何作用。

是否可以右键单击元素以弹出上下文菜单,以便我可以在列表中点击一个项目?如果可以的话,有人能指点我实现这个目标的正确方向吗?

我已经做了一些搜索,但我发现唯一的方法是使用jquery javascript捕获事件而不是触发事件。


我认为最好使用自定义菜单,这样您可以更好地控制它。 - Claudio Redi
这是自定义上下文菜单还是浏览器的? - epascarello
你无法打开默认浏览器上下文菜单,但你可以劫持它并创建自己的菜单。 - Rich Bradshaw
我之前没能找到的重复问题现在对我起作用了,现在我只需要弄清楚要点击哪个元素 :) - mcgrailm
这个答案对我来说很好,但是我想要模拟在当前鼠标位置点击。所以在代码中的0,0,0,0这部分,我将最后两个0替换为相对于屏幕的当前鼠标x/y位置。 - John Gilmer
2个回答

12

使用jQuery

$('#recover').trigger({
    type: 'mousedown',
    which: 3
});
否则
var element = document.getElementById('recover');
var e = element.ownerDocument.createEvent('MouseEvents');

e.initMouseEvent('contextmenu', true, true,
     element.ownerDocument.defaultView, 1, 0, 0, 0, 0, false,
     false, false, false,2, null);


return !element.dispatchEvent(e);

3
当然,你可以使用jQuery的trigger()功能。
$('#recover').trigger({
    type: 'mousedown',
    which: 3
});

根据您所需要的,您可能希望先触发鼠标按下事件,然后再触发鼠标释放事件,代码如下:

$('#recover').trigger({
    type: 'mousedown',
    which: 3
}).trigger({
    type: 'mouseup',
    which: 3
});

我并不喜欢像这样链接长命令,但如果对你的应用程序更易于阅读,那么就采用这种方式吧。


4
太好了,一个有效解决方案被踩了。干得好,匿名的朋友。 - Jordan
1
为什么这个示例无法工作? http://jsbin.com/OjubeKU/1/edit - andreaconsole
1
你为什么认为它不起作用,@andreaconsole?你没有任何日志可以向人证明它是否正常工作,但计算机可能是正常的。你期望它做什么?另外,你应该创建一个新的问题。 - Jordan
1
你是对的,Jordan。我本来期望能看到上下文菜单,但我发现这不会发生,尽管我并不完全明白为什么... - andreaconsole
这个没用,你能把它移除吗? - Anders Lindén

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