我有需要触发通过JavaScript浏览器(IE,火狐,Safari浏览器等),上下文菜单的打开。 我想解决的问题,是当一个重叠元素是右键单击,在它下面的元素显示其上下文菜单。 因此,如果顶层元素是一个标签,当你右键点击,我需要显示为下面的输入的元素的上下文菜单。
我知道如何保持标签的右键菜单来显示,但我不知道如何随意打开一个上下文菜单。
任何帮助表示赞赏!
我有需要触发通过JavaScript浏览器(IE,火狐,Safari浏览器等),上下文菜单的打开。 我想解决的问题,是当一个重叠元素是右键单击,在它下面的元素显示其上下文菜单。 因此,如果顶层元素是一个标签,当你右键点击,我需要显示为下面的输入的元素的上下文菜单。
我知道如何保持标签的右键菜单来显示,但我不知道如何随意打开一个上下文菜单。
任何帮助表示赞赏!
对不起,是不幸的消息的人,但是这是不可能的JavaScript做。
我不想阻挠你,恰恰相反,尤其是因为你回答我的问题:)
我不认为浏览器的contect菜单是通过网页上的一个普通的脚本访问。
如果你问的是实际可行的,那么浏览器制造商可能会认为这是一个错误,删除此行为。 跨浏览器,这种行为是不太可能今天是可用的。
你为什么不捕获鼠标事件,每当鼠标直接在下面要显示,推低覆盖的元素的上下文菜单元素的区域,否则重回巅峰?
这是一个方法可行,我能想到的,基本上露出/暴露取决于鼠标的位置隐藏的元素。 像切割孔到覆盖。
或者,你为什么不使文本字段透明,把下面的文本字段覆盖完全?
如果这个不奏效技术,那么至少你在提交bug或增强针对目标浏览器中的一个点。
顺便说一句,它看起来像上下文菜单居然直接插入符号的位置,如果用户右键单击的作品,所以这可能是另一个漏洞为你考虑。
我有可能会满足您的需求可能的解决方案。 这是不是很完美,我只是做在一些浏览器的几个简单的测试(福克斯3.6,IE7,IE8,Chrome 4的,在XP上的Safari 3)需要进行调整和改进,但它的一个开端。 基本思路是,以去除标签上的鼠标按下使所需字段由鼠标松开事件击,因此触发了对相关领域的上下文菜单中单击鼠标右键。
// Remove the contextmenu from "In-Field" Labels
base.$label.bind("contextmenu",function(e){
return false;
});
// Detect right click on "In-Field" label:
// hide label on mousedown so mouseup will target the field underneath.
base.$label.mousedown(function(e){
if ( e.which == 3 ){
var elLbl = $(this);
elLbl.hide();
var elFid = $(this).attr("for");
// bind blur event to replace the label when we are done.
$("#" + elFid ).bind("blur.infieldlabel",function(){
elLbl.show();
$("#" + elFid ).unbind("blur.infieldlabel");
});
return false;
}
});
在IE和Safari浏览器遇到一个奇怪的问题,你需要点击和两次前的标签将再次显示(是与事件相关的定时,我认为)。 您可以很容易地看到为什么这是通过看代码发生。 另外,在狐狸有时会发现轻微的毛刺粘贴到后场,在模糊的标签出现的一瞬间,当它不应该。 这应该是一个相当简单的事情,如果你决定将这一方法到你的代码来纠正。