我正在尝试使用contextmenu&以跨浏览器的方式单击锚元素上的处理程序,这证明非常困难。
问题在于:如果在来自contextmenu事件处理程序的contextmenu事件上调用preventDefault()
,则浏览器的行为会有所不同。所有浏览器都无法正确显示其浏览器的默认上下文菜单。在Chrome&然而,Safari然后浏览器跟随元素的click事件(并且仅当取消contextmenu事件时)。
当我从contextmenu处理程序中取消contextmenu事件时,我不希望在同一元素上触发连续的click事件。有没有一个干净的方法来解决这个问题?在contextmenu处理程序和调用stopPropagation函数上都不返回false可以缓解这个问题!
Here是一个带有奇怪故障的演示(使用Webkit检查器或Firebug来查看跟踪)
这是一个答案:使用jQuery而不是POJ来清理宽度/高度的东西:
function Cancel_Next_Click()
{
// Compatibility - Chrome & Safari bug where context click event is followed by an undesired click event
var Cancel_Next_Click_Element = document.createElement("div");
Cancel_Next_Click_Element.style.position = "fixed";
Cancel_Next_Click_Element.style.left = "0px";
Cancel_Next_Click_Element.style.top = "0px";
Cancel_Next_Click_Element.style.width = window.innerWidth;
Cancel_Next_Click_Element.style.height =window.innerHeight;
document.body.appendChild(Cancel_Next_Click_Element);
var Cancel_Next_Click_Element_Listener = function() {
document.body.removeChild(Cancel_Next_Click_Element);
document.removeEventListener('mouseup', Cancel_Next_Click_Element_Listener, false);
}
document.addEventListener('mouseup', Cancel_Next_Click_Element_Listener, false);
}
答案 0 :(得分:1)
通过使用像span
之类的其他元素,您不必担心默认操作,因为即使默认情况下也不会有点击。我发现这两个jquery插件可能会为你解决问题:
http://abeautifulsite.net/blog/2008/09/jquery-context-menu-plugin/
http://beckelman.net/post/2008/11/04/Right-or-Left-Click-Context-Menu-Using-jQuery-Demo.aspx