我正在研究像 javascript 元素选择器这样的 Firebug ,但无法弄清楚如何阻止所有 JavaScript 事件在单击时触发。 firebug lite 插件 ( https://getfirebug.com/firebuglite ) 正在做我想要的,但无法弄清楚他们在做什么。 任何帮助将不胜感激。
塞纳里奥:
- 用户选择元素检查器
- 用户点击元素
- 不应触发 onClick、mousedown、mouseup
我试过以下但没有成功:
function stopEvents(el){
for(var key in window) {
if (key.indexOf("on") == 0)
el.addEventListener(key.substr(2), stop, false);
}
}
function StopEvent(pE)
{
stopEvents(pE);
if (!pE)
if (window.event)
pE = window.event;
else
return;
if (pE.cancelBubble != null)
pE.cancelBubble = true;
if (pE.stopPropagation)
pE.stopPropagation();
if (pE.preventDefault)
pE.preventDefault();
if (window.event)
pE.returnValue = false;
if (pE.cancel != null)
pE.cancel = true;
}
编辑:
$('.somediv').on("click", function(e){
//Stop bubbling and propagation
StopEvent(e);
//EDIT: Still not working with this
e.stopImmediatePropagation();
//RUN only my code here
console.log("My code is running still");
return false;
});
如果有另一个库比如 YUI 将事件绑定(bind)到同一个 DOM 元素。它会在我的之后触发那里的事件。我似乎无法劫持事件来阻止这种情况的发生。
编辑:
我不能使用禁用,因为我需要能够触发我的事件。如果我执行以下操作,我将无法触发上述事件。我也无法附加父事件,因为 DOM 将停止触发该节点的树上的所有事件。
$('.somediv').on("mouseover", function(e){
$(this).attr("disabled", "disabled");
});
编辑:
我要禁用的事件在我的脚本运行之前就已创建。这些事件可以是任何 javascript 库,例如 YUI、Dojo、jQuery、JavaScript 等...
最佳答案
禁用页面上的所有事件非常容易。困难的部分是在需要时恢复它们。
document.body.innerHTML = document.body.innerHTML;
这将通过用它的“原始”副本替换 DOM 来有效地删除绑定(bind)到 DOM 节点的所有事件。
大多数时候用户甚至不会注意到重绘。
关于javascript - 防止触发所有 JavaScript 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19105360/