js中的自定義事件有attachEvent,addEventListener等等好多種,往往受困於瀏覽器相容,而且程式碼寫起來也相當麻煩。jQuery為我們解決了這個問題,幾行程式碼就可以很好的實現事件的各種傳遞。
例如,我要點選一個button,現在要將這個點選事件丟擲來,從其他任何想要的地方去接收;
這個是button
<button name="btn" onclick="clickbtn()">按鈕</button>
js:
1 var btn=$("button"); 2 btn.bind("evtClick",function(evt,v1,v2){alert("success:"+v1+v2);}); 3 function clickbtn(){ 4 btn.trigger("evtClick",["value1","value2"]); 5 }
第一行,通過jQuery獲得這個dom元素物件
第二行,新增一個事件監聽evtClick,並對其實現處理方法
第三行,在clickbtn中新增事件觸發,事件的名字叫做“evtClick”,並且傳遞一個陣列存放所有的傳遞的引數,第二行,事件處理部分就按照這個傳遞的規則實現
幾行程式碼就實現了事件丟擲機制。當然,這樣寫或許再少一行程式碼:
1 $("button").bind("evtClick",function(evt,v1,v2){alert("success:"+v1+v2);}); 2 function clickbtn(){ 3 $("button");.trigger("evtClick",["value1","value2"]); 4 }
迴圈建立多個div,丟擲事件到外部物件:
1 for (var i=0; i < 10; i++) { 2 var myJimmy = new Jimmy(1,"www.bai1du.com"+i,"jimmychu"); 3 var btn=myJimmy.createButton(); 4 btn.type="button"; 5 btn.value="按鈕"+i; 6 body.appendChild(btn); 7 var btnJQuery=jQuery(btn);//所有需要使用jquery的dom必須要用jQuery包裝起來 8 (function(btn,obj){ 9 btn.click(function(){ 10 btn.trigger("evtClick",[obj.url]); 11 }); 12 })(btnJQuery,myJimmy); 13 btnJQuery.bind("evtClick",function(evt,v1){alert(v1);});//可以寫到外部呼叫該物件的類裡邊,實現事件的傳遞 14 }
注意:jQuery中事件名稱不能與函式方法名稱相同,如果相同則不能進入方法
如上述觸發的事件為“evtClick”,不能有如下的函式
function evtClick(){ //something }