我如何使用Javascript手动触发右键点击?
我可以使用jQuery完成此操作,但在这种情况下,我只能使用纯Javascript。
我如何使用Javascript手动触发右键点击?
我可以使用jQuery完成此操作,但在这种情况下,我只能使用纯Javascript。
CustomEvent
构造函数创建一个事件,或者(当不支持时)使用 document.createEvent
并将字符串 "HTMLEvents" 作为参数创建一个事件 (因为你将要创建一个 click
事件)。然后,使用 initEvent
方法创建一个 click
事件。dispatchEvent
方法来触发该事件。如果你使用的是IE,则必须使用 fireEvent
方法。contextmenu
,请使用以下代码:var element = document.getElementById('yourElement');
if (window.CustomEvent) {
element.dispatchEvent(new CustomEvent('contextmenu'));
} else if (document.createEvent) {
var ev = document.createEvent('HTMLEvents');
ev.initEvent('contextmenu', true, false);
element.dispatchEvent(ev);
} else { // Internet Explorer
element.fireEvent('oncontextmenu');
}
contextmenu
事件还是真正的右键单击? - Rob WdispatchEvent
方法。您应该使用mousedown
而不是click
,因为click
事件通常无法捕获右键点击事件。 **示例:http://jsfiddle.net/9gbd4/1/**。注意:如果您想使用JavaScript显示上下文菜单,请放弃,因为JavaScript无法触发此类行为。 - Rob WinitEvent
现已弃用。 - automaton这是另一种变体,这次使用的是MouseEvent API,它更加现代化。在我的情况下,我实际上发送了所有三个事件mouseup/mousedown/contextmenu:
var element = document.getElementById("yourElement");
var ev1 = new MouseEvent("mousedown", {
bubbles: true,
cancelable: false,
view: window,
button: 2,
buttons: 2,
clientX: element.getBoundingClientRect().x,
clientY: element.getBoundingClientRect().y
});
element.dispatchEvent(ev1);
var ev2 = new MouseEvent("mouseup", {
bubbles: true,
cancelable: false,
view: window,
button: 2,
buttons: 0,
clientX: element.getBoundingClientRect().x,
clientY: element.getBoundingClientRect().y
});
element.dispatchEvent(ev2);
var ev3 = new MouseEvent("contextmenu", {
bubbles: true,
cancelable: false,
view: window,
button: 2,
buttons: 0,
clientX: element.getBoundingClientRect().x,
clientY: element.getBoundingClientRect().y
});
element.dispatchEvent(ev3);
var element = document.getElementById("yourElement"),
ev;
if(document.createEvent ) {
ev = document.createEvent("MouseEvents");
ev.initMouseEvent("click", true, false, window,0,0,0,0,0,false,false,false,false,2,null);
element.dispatchEvent(ev);
} else {
ev = document.createEventObject();
ev.button = 2;
element.fireEvent('onclick', ev);
}
根据mdn initMouseEvent更新。 祝你好运 :)
ev.which
无法更改,因为它是一个只读属性(至少在 Firefox 3.6.23 中是这样)。 - Rob W