Webkit: contextmenu / click处理bug的解决方案
Webkit: contextmenu / click handling bug workaround?
我正在尝试使用contextmenu &以跨浏览器的方式单击锚元素上的处理程序,这被证明是非常困难的。
这里的问题是:如果preventDefault()
被上下文菜单事件从上下文菜单事件处理程序调用,浏览器的行为不同。所有浏览器都不会正确显示其浏览器的默认上下文菜单。在Chrome &;但是,Safari浏览器会遵循元素的单击事件(并且仅在取消contextmenu事件的情况下)。
当我从上下文菜单处理程序中取消上下文菜单事件时,我不希望在同一元素上触发连续的单击事件。有没有干净利落的办法来解决这个问题?无论在contextmenu处理程序上返回false还是调用stopPropagation函数都不能缓解这个问题!
这是一个带有奇怪故障的演示(使用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);
}
通过使用其他元素(例如span
),您不必担心默认操作,因为即使在默认情况下也不会有单击。我发现这两个jquery插件可以帮你解决这个问题:
相关文章:
- 可以转换显示属性吗?如果没有,什么'这是最好的解决方案
- iPad虚拟键盘-哪一个-javasctript解决方案
- AJAX HTTP基本身份验证解决方案
- 在chrome web商店中打开时,是否有允许执行内容/后台脚本的解决方案
- Chart.js-添加渐变而不是纯色-实现解决方案
- learnyounode杂耍异步解决方案不工作
- 了解因子分解解决方案
- 提交表单后的最佳解决方案
- 计时器在使用 jQuery 一分钟后没有触发,或者每 1 分钟后给出一些其他解决方案来触发功能
- chrome中的意外全局变量有解决方案吗
- 更好的解决方案HTML元素幻灯片从右侧CSS转换
- 使用SeleniumWebdriver将文本复制到文件时出现编译错误的解决方案
- 如何让我的网站上的WEBP图像加载在morzilla firefox中有一个可能的解决方案吗?如果是,那么如何
- JS驱动的常见问题页面的推荐DB解决方案
- 这里有一个更优雅的/DRY/可维护的JS解决方案
- 什么是农民最实用的解决方案;印刷动物”;
- 根据某些条件验证用户输入,而不是将输入输入到数组中,需要最基本的解决方案
- 将数据加载到地图上的更好解决方案
- 我根据解决方案按类对
- 元素进行分组,但需要帮助了解它的工作原理
- Webkit: contextmenu / click处理bug的解决方案