代码之家  ›  专栏  ›  技术社区  ›  Jonathan Wood

从JavaScript函数访问事件对象

  •  1
  • Jonathan Wood  · 技术社区  · 10 年前

    我有类似以下内容:

    <div onclick="doSomething()">
       Content...
       <div onclick="doSomethingElse()">
       </div>
    </div>
    

    什么时候 doSomethingElse() 我不想 doSomething() 也可以调用。

    在网上搜索,我找到了 event.stopPropagation() event.cancelBubble() ,防止事件 冒泡 到父元素。

    两个问题:

    1. 如何从获取事件对象 做其他事情() ?

    2. 是否需要同时使用 event.stopPropagation() event.cancelBubble() 或者行业是否就此制定了标准?

    2 回复  |  直到 10 年前
        1
  •  2
  •   Community CDub    8 年前

    1.)您可以将事件作为函数的第一个参数传入:

    <div onclick="doSomething(event)">
       Content...
       <div onclick="doSomethingElse(event)">
       </div>
    </div>
    
    <script>
        function doSomethingElse(e) {
            // Prevent the doSomething event from being propagated after this one:
            e.stopPropagation();
    
            //OPTIONALLY: Prevent the *default* event from occurring:
            e.preventDefault();
        }
    </script>
    

    (注意:jQuery事件绑定也是如此)

    Example Fiddle


    我开始发现人们使用 cancelBubble 而是切换到 stopPropagation 完全(先前的主要用于传统IE支持)。此外,MDN文件还说 停止传播 而是因为 cancelBubble(取消气泡) 既“非标准”又“已弃用” ( source ).

    (注: 停止传播 孤独不会停止 默认事件 。为此,您需要打电话 event.preventDefault() ( source ).

        2
  •  0
  •   Igwe Kalu    10 年前

    您应该按如下方式定义“doSomethingElse”:

    var doSomethingElse = function(e){
        // e: event object ... so ...
        e.stopPropagation(); // enough
    };
    

    您还应该在调用中传递事件对象: doSomethingElse(event)

    event.stopPropagation() works on all browsers, as for IE, works as expected on IE9 and later .