jQuery之trigger()/triggerHandler()

为什么要用trigger() ?


相信刚开始接触大家也都有这样的想法:比如前台页面里有:<p id="p1">请点击这里!</p> ,你希望加载页面时就执行这个事件给这个这p绑定了click事件(将下面的代码写在$(function(){});里面):

           $("#p1").click(function(){

                alert("hello!");

            });

   如果用trigger(),你就要写成这样:

           $("#p1").click(function(){

                alert("hello!");

            }).trigger(click);

这样写不是更加麻烦了吗?可以这么说,但是用trigger()最大的好处就是它是可以传递参数进去的。例如:

       //myEvent为自定义事件名

       $("#p1").bind("myEvent",function(event,str1,str2) {

               alert(str1 + ' ' + str2);

          }); 

        $("#p1").trigger("myEvent",["Hello","World"]);

也可以这样写:

   $("#p1").bind("myEvent",function(event,str1,str2){

               alert(str1 + ' ' + str2);

         }).trigger("myEvent",["Hello","World"]);


1、trigger()


trigger()函数用于在每个匹配元素上触发指定类型的事件。

语法:$(selector).trigger(event,[param1,param2,...])

trigger()函数的返回值为jQuery类型,返回当前jQuery对象本身。

参数

描述

event

必需。规定指定元素要触发的事件。

可以使自定义事件(使用 bind() 函数来附加),或者任何标准事件。

[param1,param2,...]

可选。传递到事件处理程序的额外参数。

额外的参数对自定义事件特别有用。

使用 Event 对象来触发事件:

语法:$(selector).trigger(eventObj)

参数

描述

eventObj

必需。规定事件发生时运行的函数。


Eg:基本触发&自定义事件

[html]  view plain  copy
  1. <span style="font-size:18px;"><html>   
  2. <head>   
  3. <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />   
  4. <script type="text/javascript"src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>   
  5.    
  6. <script type="text/javascript">   
  7.     $(document).ready(function (){   
  8.        $('#button1').click(function(){   
  9.            alert('button1');                                  
  10.            $('#button2').trigger('click');    //点击1的时候,触发2   
  11.         });   
  12.    
  13.        $('#button2').click(function(){   
  14.            alert('button2');   
  15.            $("#button3").trigger("myEvent",["Hello","World!"]); //点击2的时候,触发3  
  16.         });   
  17.    
  18.        $("#button3").bind("myEvent", function (event,message1, message2) {  //自定义事件myevent   
  19.           alert(message1 + ' ' +message2);   
  20.         });   
  21.     });   
  22. </script>   
  23.    
  24. </head>   
  25. <body style="text-align:center;">   
  26.     <divstyledivstyle="margin-top:130px;">   
  27.         <buttonidbuttonid='button1'>click1</button>   
  28.         <buttonidbuttonid='button2'>click2</button>   
  29.         <buttonidbuttonid='button3'>click3</button>   
  30.     </div>   
  31. </body>   
  32. </html> </span>  

结果:点击button1时,先弹出内容“button1”,再弹出内容“button2”,再弹出“Hello World!”;点击button2时,先弹出内容“button2”,再弹出内容“Hello World!”;点击button3无内容弹出。

解释:代码中,给button1添加click事件,先alert('button1'),再触发button2的click事件;在button2的click事件中,先alert('button2'),再触发button3的myEvent事件,该事件是自定义事件,传入了两个参数:"Hello"和"World!";button3绑定的是自定义事件:myEvent事件,该事件要alert显示传入的参数,并中间以空格隔开,参数message1对应"Hello",参数message2对应"World!";button3并没有设置click事件,所以点击button3当然没有反应了。


2、triggerHandler()


triggerHandler()函数用于在每个匹配元素上触发指定类型的事件。

语法:$(selector).triggerHandler(event,[param1,param2,...])

triggerHandler()函数的返回值为任意类型,返回触发执行的事件处理函数的返回值。

参数

描述

event

必需。规定指定元素要触发的事件。

[param1,param2,...]

可选。传递到事件处理程序的额外参数。


3、不同


  • triggerHandler()不会触发执行元素的默认行为(例如链接click事件默认的跳转行为,表单submit事件默认的提交行为)。
  • .trigger() 会操作 jQuery 对象匹配的所有元素,而 .triggerHandler() 只影响第一个匹配元素。
  • 由.triggerHandler() 创建的事件不会在 DOM 树中冒泡;如果目标元素不直接处理它们,则不会发生任何事情。
  • triggerHandler()的返回值是对应事件处理函数的返回值,而不是当前jQuery对象本身。此外,如果没有处理程序被触发,则这个方法返回 undefined。


4、实例


Eg1:trigger会触发事件冒泡,而triggerHandler则不会。

[html]  view plain  copy
  1. <span style="font-size:18px;"><!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4.          <metacharsetmetacharset="utf-8">  
  5.          <title></title>  
  6.          <!-- trigger会触发事件冒泡,而triggerHandler则不会。 -->  
  7.     <script type="text/javascript" src="../jquery-3.1.1.js"></script>   
  8.     <script type="text/javascript">  
  9.        $(function(){     
  10.        $("#outA").click(function(){     
  11.            alert("A");     
  12.         });     
  13.        $("#outB").click(function(){     
  14.            alert("B");     
  15.         });     
  16.        $("#outC").click(function(){     
  17.            alert("C");     
  18.         });    
  19.         // 使用trigger,依次C、B、A   
  20.        $("#outC").trigger("click");   
  21.         // 使用trigger,只会打印出C   
  22.        $("#outC").triggerHandler("click");   
  23.     });  
  24.    </script>  
  25. </head>  
  26. <body>  
  27.     <div id="outA" style="width:400px; height:400px; background:#CDC9C9;position:relative;">     
  28.         <div id="outB" style="height:200px;background:#0000ff;top:20px;position:relative;">     
  29.             <div id="outC" style="height:100px;background:#FFB90F;top:250px;position:relative;"></div>      
  30.         </div>     
  31.     </div>     
  32. </body>  
  33. </html></span>  


Eg2:triggerHandler只触发jQuery对象集合中第一个元素的事件处理函数,而trigger则触发所有对象的事件处理函数。

[html]  view plain  copy
  1. <span style="font-size:18px;"><!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4.          <meta charset="utf-8">  
  5.          <title></title>  
  6.          <!-- triggerHandler只触发jQuery对象集合中第一个元素的事件处理函数,而trigger则触发所有对象的事件处理函数。 -->  
  7.     <script type="text/javascript" src="../jquery-3.1.1.js"></script>   
  8.          <script type="text/javascript">  
  9.                    $(function(){  
  10.                             // 给按钮绑定click事件处理函数   
  11.                       $("input[type=button]").click(function(event){   
  12.                           alert($(this).attr("id"));   
  13.                        });   
  14.                        // 选中的button集合中,只触发第一个button的click事件,只打印出1   
  15.                        // $("input[type=button]").triggerHandler("click");   
  16.                        // 选中的button集合中,触发所有button的click,打印出1,2,3   
  17.                       $("input[type=button]").trigger("click");   
  18.                    });  
  19.          </script>  
  20. </head>  
  21. <body>  
  22.     <input type="button" id="1" value="1" />   
  23.     <input type="button" id="2" value="2" />   
  24.     <input type="button" id="3" value="3" />  
  25. </body>  
  26. </html></span>  


Eg3:trigger会触发事件的默认行为,triggerHandler则会阻止事件的默认行为。

[html]  view plain  copy
  1. <span style="font-size:18px;"><!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4.     <title></title>  
  5.     <script type="text/javascript"src="../jquery-3.1.1.js"></script>   
  6.          <script type="text/javascript">  
  7.                    $( document).ready(function() {  
  8.                             $("input[type='checkbox']").bind("click",function(){  
  9.                                      $("#test").val("www.baidu.com");  
  10.                             });  
  11.                    });  
  12.                    function bntClick(){  
  13. //当点击checkbox的时候,checkbox勾上并将input[type='text']赋值www.baidu.com;  
  14. //当点击 input[type='button']的时候就会发生跟点击checkbox同样的事情。  
  15.                             $("input[type='checkbox']").trigger("click");  
  16. //将trigger换成triggerHandler时候,当点击 input[type='button']的时候,就只会给input[type='text']赋值,而不会勾选checkbox。  
  17. //因为triggerHandler 阻止了绑定事件的元素的默认行为  
  18.                             //$("input[type='checkbox']").triggerHandler("click");  
  19.                    }  
  20.          </script>  
  21. </head>  
  22. <body>  
  23.          <input type="checkbox" />  
  24.          <input type="text" id="test"/>  
  25.          <input type="button" value="button" id="bnt" onclick="bntClick()"/>  
  26. </body>  
  27. </html></span>  


Eg3:trigger会触发事件的默认行为,triggerHandler则会阻止事件的默认行为。

[html]  view plain  copy
  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4.     <title></title>  
  5.     <script type="text/javascript" src="../jquery-3.1.1.js"></script>   
  6.          <script type="text/javascript">  
  7.          $(function(){  
  8.              $("#old").click(function(){  
  9.                 $("input").trigger("focus");  
  10.              });  
  11.              $("#new").click(function(){  
  12.                 $("input").triggerHandler("focus");  
  13.              });  
  14.              $("input").focus(function(){  
  15.                 $("<span>Focused!</span>").appendTo("body").fadeOut(1000);  
  16.              });  
  17.          });  
  18.         </script>  
  19. </head>  
  20. <body>  
  21.          <input type="text" />  
  22. //点击第一个按钮,文本框获得焦点且在button的后面出现文字“Focused”,1秒后文字消失。  
  23.          <button id="old">trigger</button>  
  24. //点击第二个按钮,在button的后面出现文字“Focused”,1秒后文字消失,文本框不会获得焦点。  
  25.          <button id="new">triggerHandler</button>  
  26. </body>  
  27. </html>  


Eg4:trigger和triggerHandler在触发事件的时候都可以自定义参数。

[html]  view plain  copy
  1. <span style="font-size:18px;"><!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4.          <meta charset="utf-8">  
  5.          <title></title>  
  6.     <span style="white-space:pre">  </span> <script type="text/javascript" src="../jquery-3.1.1.js"></script>   
  7.          <script type="text/javascript">  
  8.                    $(function(){   
  9.                        $("#btn").click(function(event,a, b){   
  10.                            alert(a);   
  11.                            alert(b);   
  12.                        });   
  13.                        // 普通的点击事件时,a和b是undefined类型   
  14.                        // $("#btn").click();   
  15.                        // $("#btn").trigger("click",["第一个参数","第二个参数"]);  
  16.                       $("#btn").triggerHandler("click",["第一个参数","第二个参数"]);   
  17. //加载页面后会分别弹出字符串“第一个参数”,“第二个参数”,如果点击button,则会弹出两个undefined。因为点击button引发的是button的click方式,此时传入的参数a和b并没有实际意义,click()不能自定义参数。  
  18.                    });   
  19.          </script>  
  20. </head>  
  21. <body>  
  22.          <input type="button" id="btn" value="click">   
  23. </body>  
  24. </html></span>  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值