经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » JavaScript » 查看文章
jq绑定事件
来源:cnblogs  作者:胡正  时间:2020/12/28 9:51:57  对本文有异议
  1. <div style="width:100px;height:100px;border:1px solid red;overflow:auto;" id="box">
  2. <div style="width:50px;height:50px;border:1px solid red" id="content"></div>
  3. </div>
html元素

1、js绑定事件分为冒泡和捕获两种情况

2、冒泡执行顺序,先执行子元素的事件,再执行父元素的事件

3、捕获执行顺序,先执行父元素的事件,再执行子元素的事件

4、在既有捕获又有冒泡的情况下,先从外层一层一层往内执行捕获,一直到目标元素,目标元素按照绑定顺序执行。然后继续往外执行冒泡。这个是自己测试出来的结果,仅代表个人看法,和网上很多人的说法不一样。也欢迎大佬指正。

这里将流程划分为三部分:1、从外往内执行捕获。 2、达到目标元素后,按绑定顺序执行。3、从内往外冒泡

5、dom动画发生时,取到的dom数据是动画前的

6、停止事件的传播 e.stopPropagation();

在4的流程中,执行e.stopPropagation()可以让事件不传播的下一步骤,并且不传播的下一个dom节点。在第二步的同dom节点不受影响。

  1. $("#content").click(function (e) {
  2. //$(this).height(200); //第一次,直接改变高度
  3. $(this).animate({ "height": 200 }, 2000, function () {
  4. console.log("end");
  5. }).stop(true, true);//第二次,缓慢改变高度
  6. //e.preventDefault();
  7. console.log("content 冒泡1");
  8. });
  9. $("#content").click(function (e) {
  10. console.log('content 冒泡2', $(this).height());
  11. });
  12. $("#content").on("click", function () {
  13. console.log('content 冒泡3', $(this).height());
  14. });
  15. $("#content")[0].addEventListener("click", function (e) {
  16. console.log('content 捕获1', $(this).height());
  17. }, true);
  18. $("#content")[0].addEventListener("click", function () {
  19. console.log('content 捕获2', $(this).height());
  20. }, true);
  21. $("#box").click(function () {
  22. console.log('box 冒泡1', $("#content").height());
  23. });
  24. $("#box").on("click", function () {
  25. console.log('box 冒泡2', $("#content").height());
  26. });
  27. $("#box")[0].addEventListener("click", function (e) {
  28. console.log('box 捕获1', $("#content").height());
  29. e.stopPropagation();
  30. }, true);
  31. $("#box")[0].addEventListener("click", function (e) {
  32. console.log('box 捕获2', $("#content").height());
  33. //e.stopPropagation();
  34. }, true);
  35. $("#box").on("scroll", function () {
  36. console.log("resize");
  37. });
demo

 7、jquery on 绑定

jquery on 可以将子dom的事件绑到父节点上。执行顺序是 1、绑定在子节点的事件,2、绑定在父节点的子节点的事件 3、父节点的事件

  1. $("#box").on("click", function () {
  2. console.log('box 冒泡1', $(this).height());
  3. });
  4. $("#box").on("click","#content", function () {
  5. console.log('content 冒泡2', $("#content").height());
  6. });
  7. $("#content").on("click", function () {
  8. console.log('content 冒泡3', $(this).height());
  9. });
on 的顺序

 8、各种绑定冒泡事件的总结

8-1.选择器匹配到的元素比较多时,不要用bind() 或者 click(function(){})迭代绑定,会绑定很多事件

8-2.用delegate()或者on(),可以动态给子节点添加的绑定事件,绑定这个节点不能是动态的。

8-3.用delegate()和on()方法,dom树不要太深,因为一层一层冒泡上来影响性能。

9、自定义事件

  1. $("#box").click(function (e) {
  2. $("#box").trigger("clickCustom",["a","b"]);
  3. });
  4. $("#box").on("clickCustom",function () {
  5. console.log(arguments);
  6. });
demo

 

原文链接:http://www.cnblogs.com/tanl/p/5916455.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号