模拟一个实际的右键,而不仅仅是鼠标向下或鼠标向上
Simulate an actual right click, not just mousedown or mouseup
我正在使用一个叫做contextmenu的jQuery插件来代替某些元素上的右键上下文菜单。这个插件的源代码可以在这里找到。
将上下文菜单附加到元素上,如下所示:
$(".class").contextMenu('menu_template', {
menuStyle: {
border: '0px',
},
itemStyle: {
},
itemHoverStyle: {
},
onShowMenu: function(e, menu) {
},
other stuff ....
})
另外,我想手动触发这个菜单,并认为最简单的方法是模拟右键单击元素。
I have try:
$('.class').triggerHandler('contextmenu');
和
$('.class').trigger({
type:'mousedown',
button:2
}).trigger({
type:'mouseup',
button:2
});
和
$('.class').trigger({
type:'mousedown',
which:3
}).trigger({
type:'mouseup',
which:3
});
和
$('.class').trigger({
type:'mousedown',
which:3
})
这些都没有成功。
我确信这与这个插件将自己附加到元素并覆盖上下文菜单的方式有关,但我不是JavaScript专家,所以我不确定发生了什么。
如何手动触发此菜单出现?
你试过这样的方法吗?
$(document).mousedown(function(e) {
if (e.button == 2) {
$("span.demo1").trigger("contextmenu");
}
return true;
});
$(document).ready(function() {
$(document).bind("contextmenu", function(e) {
e.preventDefault();
});
$('span.demo1').contextMenu('myMenu1', {
bindings: {
'open': function(t) {
alert('Trigger was ' + t.id + ''nAction was Open');
},
'email': function(t) {
alert('Trigger was ' + t.id + ''nAction was Email');
},
'save': function(t) {
alert('Trigger was ' + t.id + ''nAction was Save');
},
'delete': function(t) {
alert('Trigger was ' + t.id + ''nAction was Delete');
}
}
});
});
$(document).mousedown(function(e) {
if (e.button == 2) {
var element = document.getElementById("quickDemo"),
ev;
if (document.createEvent) {
ev = new MouseEvent("contextmenu", {
screenX: 0,
screenY: 0,
clientX: element.offsetLeft,
clientY: element.offsetTop + element.offsetHeight,
ctrlKey: false,
shiftKey: false,
altKey: false,
metaKey: false,
button: 2
});
element.dispatchEvent(ev);
} else {
ev = document.createEventObject();
element.fireEvent('contextmenu', ev);
}
}
return true;
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="http://www.trendskitchens.co.nz/jquery/contextmenu/jquery.contextmenu.r2.js"></script>
<div class="contextMenu" id="myMenu1" style="display: none;">
<ul>
<li id="open">
<img src="folder.png">Open</li>
<li id="email">
<img src="email.png">Email</li>
<li id="save">
<img src="disk.png">Save</li>
<li id="delete">
<img src="cross.png">Delete</li>
</ul>
</div>
<span class="demo1" id="quickDemo" style="float:right;border: 1px solid #888;">
<b>DEMO</b> right-click me!!
</span>
相关文章:
- Ajax聊天消息重复而不仅仅是更新
- 鼠标悬停事件影响列表中所有行中的按钮,而不仅仅是特定按钮
- 事件为所有项目而不仅仅是当前项目激发
- 在加载时显示,而不仅仅是在选中时显示
- 删除 HttpCookie 不仅仅是它的值
- 脚本选择所有输入,而不仅仅是复选框
- for 循环中的 if 语句都执行,而不仅仅是一个
- 当将函数传递给方法时,为什么使用匿名函数容器而不仅仅是原始函数有效
- .slideup()删除整个ul,而不仅仅是嵌套的li
- jQuery隐藏所有trs或td,而不仅仅是一个
- 使用Maven压缩所有内容,而不仅仅是源目录
- 从数组中删除双值,而不仅仅是javascript中的重复值
- 在全球范围内强制ng严格di,而不仅仅是在ng应用程序级别上
- Jquery Slider-获取滑块的每个数值?不仅仅是在mouseout上
- 我如何让jQuery在Facebook发布自动加载时做一些事情,而不仅仅是在页面加载时
- 如何使元素的宽度和高度为页面(文档)的100%,而不仅仅是窗口(浏览器)
- 在 Magnific 弹出窗口中打开所有图像,而不仅仅是发布图像
- 有没有办法使非html5支持浏览器支持html5,而不仅仅是html5标记,html5 api也是如此
- 检测鼠标实际移动的时间,而不仅仅是页面移动的时间
- 模拟一个实际的右键,而不仅仅是鼠标向下或鼠标向上