• 深入了解preventDefault与stopPropagation


    event.preventDefault()用法介绍(阻止默认事件)

    该方法将通知 Web 浏览器不要执行与事件关联的默认动作(如果存在这样的动作)。例如,如果 type 属性是 "submit",在事件传播的任意阶段可以调用任意的事件句柄,通过调用该方法,可以阻止提交表单。注意,如果 Event 对象的 cancelable 属性是 fasle,那么就没有默认动作,或者不能阻止默认动作。无论哪种情况,调用该方法都没有作用。

    该方法将通知 Web 浏览器不要执行与事件关联的默认动作(如果存在这样的动作)。

    例如,如果 type 属性是 "submit",在事件传播的任意阶段可以调用任意的事件句柄,通过调用该方法,可以阻止提交表单。

    注意,如果 Event 对象的 cancelable 属性是 fasle,那么就没有默认动作,或者不能阻止默认动作。无论哪种情况,调用该方法都没有作用。

    例子:

    1 $("a").click(function (e) {
    2         alert("默认行为被禁止喽");
    3         e.preventDefault();
    4     });
    5  
    6 <a href="http://www.baidu.com">测试</a>

    event.stopPropagation()用法介绍(阻止冒泡)

    该方法将停止事件的传播,阻止它被分派到其他 Document 节点。在事件传播的任何阶段都可以调用它。注意,虽然该方法不能阻止同一个 Document 节点上的其他事件句柄被调用,但是它可以阻止把事件分派到其他节点

    该方法将停止事件的传播,阻止它被分派到其他 Document 节点。在事件传播的任何阶段都可以调用它。

    注意:虽然该方法不能阻止同一个 Document 节点上的其他事件句柄被调用,但是它可以阻止把事件分派到其他节点。

    event是DOM的事件方法,所以不是单独使用,比如指定DOM

     1 <div id="A">
     2     <div id="B">
     3     </div>
     4 </div>
     5 <script>
     6     var a = document.getElementById('A'),
     7     b = document.getElementById('B');
     8     function handlera (e) {
     9         console.log(e.target);
    10     }
    11     function handler (e) {
    12         console.log(e.target);
    13         e.stopPropagation();
    14     }
    15 b.addEventListener('click', handler, false);
    16 a.addEventListener('click', handlera, false);
    17 </script>

    点击B,输出:

    1 <div id="B"></div>

    1
    <div id="A"> 2 <div id="B"> 3 </div> 4 </div> 5 <script> 6 var a = document.getElementById('A'), 7 b = document.getElementById('B'); 8 function handlera (e) { 9 console.log(e.target + 'a'); 10 } 11 function handler (e) { 12 console.log(e.target + 'b'); 13 } 14 b.addEventListener('click', handler, false); 15 a.addEventListener('click', handlera, false); 16 </script>

    点击B时,输出:

    1 [object HTMLDivElement]b
    2 [object HTMLDivElement]a

    以上例子,不难看出stopPropagation()功能就是阻止了冒泡,上面第二个例子中,没有用这个方法阻止冒泡,当点击子元素时,由于事件冒泡,触发了父元素的click事件,所以第二个例子中会多出现一次输出内容,即为:触发A元素点击事件的输出内容。

    jqueryreturn false等效于同时调用e.preventDefault()和e.stopPropagation();

    return false除了阻止默认行为之外,还会阻止事件冒泡。如果手上有一份jquery源代码的话,可查看其中有如下代码:

    1 if(ret===false){
    2     event.preventDefault();
    3     event.stopPropagation();
    4 }

    以上就是我对preventDefault与stopPropagation的了解,有很多的不足,请大家多多指出,多多留言,谢谢!!!

  • 相关阅读:
    测试开发工资为什么这么高?
    测试开发工程师技能图谱 V1.0 版 | 福利
    完成这 10+ 企业级项目实战,你也能进阶中高级测试开发
    我们准备了50000现金,给爱学习的你!手慢无~
    Git实战(四)| Git分支管理实操,搞定在线合并和本地合并
    公开课|互联网测试技术体系详解&职业发展规划
    测试面试 | 某互联网大厂测试面试真题,你能回答出多少?
    2020 中秋国庆,阖家快乐!
    测试面试 | 某BAT大厂测试开发面试真题与重点解析
    jsp_1
  • 原文地址:https://www.cnblogs.com/bo-haier/p/5644524.html
Copyright © 2020-2023  润新知