7-2 jQuery自定义事件之triggerHandler事件
本节编程练习不计算学习进度,请电脑登录imooc.com操作

jQuery自定义事件之triggerHandler事件

trigger事件还有一个特性:会在DOM树上冒泡,所以如果要阻止冒泡就需要在事件处理程序中返回false或调用事件对象中的.stopPropagation() 方法可以使事件停止冒泡

trigger事件是具有触发原生与自定义能力的,但是存在一个不可避免的问题: 事件对象event无法完美的实现,毕竟一个是浏览器给的,一个是自己模拟的。尽管 .trigger() 模拟事件对象,但是它并没有完美的复制自然发生的事件,若要触发通过 jQuery 绑定的事件处理函数,而不触发原生的事件,使用.triggerHandler() 来代替

triggerHandler与trigger的用法是一样的,重点看不同之处:

 

 

任务

  1. <!DOCTYPE html>
  2. <html>
  3.  
  4. <head>
  5. <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
  6. <title></title>
  7. <style>
  8. .left div,
  9. .right div {
  10. width: 500px;
  11. height: 50px;
  12. padding: 5px;
  13. margin: 5px;
  14. float: left;
  15. border: 1px solid #ccc;
  16. }
  17.  
  18. .left div {
  19. background: #bbffaa;
  20. }
  21.  
  22. .right div {
  23. background: yellow;
  24. }
  25. </style>
  26. <script src="https://www.imooc.com/static/lib/jquery/1.9.1/jquery.js"></script>
  27. </head>
  28.  
  29. <body>
  30. <h2>自定义事件triggerHandler</h2>
  31. <div class="left">
  32. <div id="accident">
  33. <a>triggerHandler事件</a>
  34. <input type="text">
  35. </div>
  36. <button>事件冒泡,触发浏览器默认聚焦行为</button><br><br>
  37. <button>不会冒泡,不触发浏览器默认聚焦行为</button>
  38. </div>
  39. <script type="text/javascript">
  40.  
  41. //给input绑定一个聚焦事件
  42. $("input").on("focus",function(event,title) {
  43. $(this).val(title)
  44. });
  45.  
  46. $("#accident").on("click",function() {
  47. alert("trigger触发的事件会在 DOM 树中向上冒泡");
  48. });
  49. //trigger触发focus
  50. $("button:first").click(function() {
  51. $("a").trigger("click");
  52. $("input").trigger("focus");
  53. });
  54.  
  55. //triggerHandler触发focus
  56. $("button:last").click(function() {
  57. $("a").triggerHandler("click");
  58. $("input").triggerHandler("focus","没有触发默认聚焦事件");
  59. });
  60.  
  61.  
  62.  
  63. </script>
  64. </body>
  65.  
  66. </html>
返回课程