Javascript 停止所有事件的传播
我打电话给e.stopPropagation,询问我目前申请的几乎所有事件。有没有办法停止每个事件的传播,而不必在每个函数体的开头显式调用该方法?试试这个。它需要jQuery 不,它不能全局声明 event.stopPropagation方法停止将事件冒泡到父元素,从而阻止执行任何父事件处理程序 例如,如果有一个链接在一个DIV或表单中附加了一个click方法,并且该链接也附加了一个click方法,那么它将阻止该DIV或表单click方法触发Javascript 停止所有事件的传播,javascript,jquery,Javascript,Jquery,我打电话给e.stopPropagation,询问我目前申请的几乎所有事件。有没有办法停止每个事件的传播,而不必在每个函数体的开头显式调用该方法?试试这个。它需要jQuery 不,它不能全局声明 event.stopPropagation方法停止将事件冒泡到父元素,从而阻止执行任何父事件处理程序 例如,如果有一个链接在一个DIV或表单中附加了一个click方法,并且该链接也附加了一个click方法,那么它将阻止该DIV或表单click方法触发 您可以绑定所有事件并删除不需要的事件: $('*')
您可以绑定所有事件并删除不需要的事件:
$('*').bind('blur change click dblclick error focus focusin focusout hover keydown keypress keyup load mousedown mouseenter mouseleave mousemove mouseout mouseover mouseup resize scroll select submit', function(event){
event.stopPropagation();
});
在上查看可能发生的事件,以Alex的回应为基础,使用vanilla JS和其他一些事件,所有键盘和单击事件我都可以找到:
/**
* Disable all user events on the page
*
* @returns {function()} a function to cancel the disabling
*/
const disableAllUserEvents = () => {
const events = ["click", "contextmenu", "dblclick", "mousedown", "mouseenter", "mouseleave", "mousemove",
"mouseover", "mouseout", "mouseup", "keydown", "keypress", "keyup", "blur", "change", "focus", "focusin",
"focusout", "input", "invalid", "reset", "search", "select", "submit", "drag", "dragend", "dragenter",
"dragleave", "dragover", "dragstart", "drop", "copy", "cut", "paste", "mousewheel", "wheel", "touchcancel",
"touchend", "touchmove", "touchstart"];
const handler = event => {
event.stopPropagation();
event.preventDefault();
return false;
};
for (let i = 0, l = events.length; i < l; i++) {
document.addEventListener(events[i], handler, true);
}
return () => {
for (let i = 0, l = events.length; i < l; i++) {
document.removeEventListener(events[i], handler, true);
}
};
};
编辑:只需知道这不是一个安全的解决方案,因为可以检索和取消这些事件:stopPropagation是事件对象的函数。无法全局调用它。stopPropagation可防止事件在DOM树中冒泡,阻止任何父处理程序收到事件通知。下面是一篇有趣的文章,介绍如何在运行时动态获取所有受支持的事件类型,这样您就不必手动创建列表:@Rakesh..它只停止单击事件鼠标事件和更改事件呢?
/**
* Disable all user events on the page
*
* @returns {function()} a function to cancel the disabling
*/
const disableAllUserEvents = () => {
const events = ["click", "contextmenu", "dblclick", "mousedown", "mouseenter", "mouseleave", "mousemove",
"mouseover", "mouseout", "mouseup", "keydown", "keypress", "keyup", "blur", "change", "focus", "focusin",
"focusout", "input", "invalid", "reset", "search", "select", "submit", "drag", "dragend", "dragenter",
"dragleave", "dragover", "dragstart", "drop", "copy", "cut", "paste", "mousewheel", "wheel", "touchcancel",
"touchend", "touchmove", "touchstart"];
const handler = event => {
event.stopPropagation();
event.preventDefault();
return false;
};
for (let i = 0, l = events.length; i < l; i++) {
document.addEventListener(events[i], handler, true);
}
return () => {
for (let i = 0, l = events.length; i < l; i++) {
document.removeEventListener(events[i], handler, true);
}
};
};