我正在研究像 javascript 元素选择器这样的萤火虫,但无法弄清楚如何在单击时阻止所有 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 绑定事件到同一个 DOM 元素。它会在我之后触发那里的事件。我似乎无法劫持事件来阻止这种情况的发生。
编辑:
我不能使用 disabled 因为我需要能够触发我的事件。如果我执行以下操作,我将无法触发上述事件。我也无法附加父事件,因为 DOM 将停止为该节点触发 Tree 上的所有事件。
$('.somediv').on("mouseover", function(e){
$(this).attr("disabled", "disabled");
});
编辑:
我要禁用的事件在我的脚本运行之前已经创建。这些事件可以是任何 javascript 库,例如 YUI、Dojo、jQuery、JavaScript 等...