Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 停止所有事件的传播_Javascript_Jquery - Fatal编程技术网

Javascript 停止所有事件的传播

Javascript 停止所有事件的传播,javascript,jquery,Javascript,Jquery,我打电话给e.stopPropagation,询问我目前申请的几乎所有事件。有没有办法停止每个事件的传播,而不必在每个函数体的开头显式调用该方法?试试这个。它需要jQuery 不,它不能全局声明 event.stopPropagation方法停止将事件冒泡到父元素,从而阻止执行任何父事件处理程序 例如,如果有一个链接在一个DIV或表单中附加了一个click方法,并且该链接也附加了一个click方法,那么它将阻止该DIV或表单click方法触发 您可以绑定所有事件并删除不需要的事件: $('*')

我打电话给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);
        }
    };
};