今天琢磨了好久這個trigger和triggerHandler的用法.在網上搜了好多,不過大都是相互抄襲,毛意思都沒有.后來自己做了研究.
trigger:
1.可以用來觸發事件.
1 <input id="guoyansi" value="單擊" type="button" />
1 $(function(){ 2 $("#guoyansi").click(function(){ 3 alert("點我干嘛"); 4 }); 5 //下面的兩種情況都可以在頁面加載完畢后自動觸發 6 $("#guoyansi").click(); 7 $("#guoyansi").trigger("click"); 8 9 })
2.可以用來傳遞參數trigger(typeEvent[,data]);
1 <input id="guoyansi" value="單擊" type="button" />
1 $(function(){ 2 $("#guoyansi").click(function(e,text){ 3 text=text||"我是click觸發的"; 4 alert(text); 5 }); 6 $("#guoyansi").trigger("click",["我是trigger觸發的"]); 7 8 })
3.傳遞多個參數:
1 <input id="guoyansi" value="單擊" type="button" />
1 $(function(){ 2 $("#guoyansi").click(function(e,m1,m2,m3){ 3 var text=""; 4 if(m1||m2||m3) text=m1+","+m2+","+m3; 5 else text="我是click觸發的"; 6 alert(text); 7 }); 8 $("#guoyansi").trigger("click",["m1","m2","m3"]); 9 10 })
4.自定義事件.
1 <input id="guoyansi" value="單擊" type="button" /> 2 <input type="text" id="guoTxt"/>
1 $(function(){ 2 $("#guoTxt").on("myEvent",function(){//給guoTxt自定義一個myEvent事件 3 alert($(this).val()); 4 }); 5 $("#guoyansi").click(function(){//單擊guoyansi按鈕時,觸發我們的自定義事件 6 $("#guoTxt").trigger("myEvent"); 7 }); 8 })
5.triggerHandler()的方法在作用上類似於trigger(),但是是有一定的區別的.
1.triggerHandler方法不會引起瀏覽器默認的行為,而僅僅是執行綁定到focus事件的處理程序.
1 <input type="button" id="guo" value="trigger"/> 2 <button type="button" id="yan"value="triggerHandler"/> 3 <input id="si" type="text" />
1 $(function(){ 2 $("#guo").bind("click",function(){ 3 $("#si").trigger("focus",["trigger"]); 4 }); 5 $("#yan").bind("click",function(){ 6 $("#si").triggerHandler("focus",["triggerHandler"]); 7 }); 8 $("#si").bind("focus",function(e,handler){ 9 if(typeof(handler)=="undefined") handler="用戶操作"; 10 $(this).val(handler); 11 }); 12 })
用谷歌瀏覽器測試,效果更明顯.
單擊文本框:
文本框中有光標,並且還有橙色邊框.
單擊trigger:
效果和單擊文本框是一樣的.
單擊triggerHandler:
只是執行了focus的事件,文本框中沒有光標,並且邊框也沒有變顏色.
2.trigger()對匹配到的所有元素進行操作,triggerHandler()只對第一個元素做處理.
1 <input type="button" id="guo" value="trigger"/> 2 <input type="button" id="yan" value="triggerHandler"/> 3 <input class="si" type="text" /> 4 <input class="si" type="text" /> 5 <input class="si" type="text" /> 6 <input class="si" type="text" />
$(function(){ $("#guo").bind("click",function(){ $(".si").trigger("focus",["trigger"]); }); $("#yan").bind("click",function(){ $(".si").triggerHandler("focus",["triggerHandler"]); }); $(".si").bind("focus",function(e,handler){ if(typeof(handler)=="undefined") handler="用戶操作"; $(this).val(handler); }); })
單擊trigger按鈕:
單擊triggerHandler按鈕:
3:triggerHandler()方法不會發生冒泡,如果這些事件不被目標元素直接處理,則它什么事情都不做.
<input type="button" id="guo" value="trigger"/> <input type="button" id="yan" value="triggerHandler"/> <div class="father" style="width:200px; height:200px; background-color:black;"> <div class="children" style="width:100px; height:100px; background-color:red;"></div> </div>
1 $(function(){ 2 $("#guo").bind("click",function(){ 3 $(".children").trigger("click"); 4 }); 5 $("#yan").bind("click",function(){ 6 $(".children").triggerHandler("click"); 7 }); 8 $(".father").click(function(){ 9 alert("你單擊了父div"); 10 }); 11 $(".children").click(function(){ 12 alert("你單擊了子div"); 13 }); 14 })
因為冒泡,單擊了trigger按鈕后,會彈出2個彈出框;因為不冒泡單擊triggerHandler按鈕,只會出現一個"你單擊了子div"的彈出框.
3.triggerHandler()不返回jQuery對象,而是返回有這個方法的最后一個處理程序的返回值.如果沒有返回值,則默認是undefined.
1 <input type="button" id="guo" value="trigger"/> 2 <input type="button" id="yan" value="triggerHandler"/> 3 <div class="father" style="width:200px; height:200px; background-color:black;"> 4 <div class="children" style="width:100px; height:100px; background-color:red;"></div> 5 </div>
1 $(function(){ 2 $("#guo").bind("click",function(){ 3 $(".children").trigger("click").css("background-color","blue"); 4 }); 5 $("#yan").bind("click",function(){ 6 var a=$(".children").triggerHandler("click"); 7 alert(a); 8 }); 9 $(".father").click(function(){ 10 alert("你單擊了父div"); 11 }); 12 $(".children").click(function(){ 13 alert("你單擊了子div"); 14 return "我來自triggerHandler的返回值"; 15 }); 16 })
單擊trigger后,紅色會變成藍色:
單擊triggerHandler,會有返回值.