一、綁定形式html
ele.addEventListener(evtName, fn) ele["on" + evtName] = function () {} ele.onclick = function () {}
二、addEventListener:事件監聽器。 原事件被執行的時候,後面綁定的事件照樣被執行,不會被層疊掉瀏覽器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <button>綁定事件</button> <script> var btnEle = document.getElementsByTagName("button")[0]; bindEvt2(btnEle, "click", fn1); bindEvt2(btnEle, "click", fn2); function fn1() { console.log("你是美麗的人"); } function fn2() { console.log("你是個壞人"); } function bindEvt2(ele, evtName, fn) { ele.addEventListener(evtName, fn); } </script> </body> </html>
//九尺龍泉萬卷書,上天生我意何如。 //不能報國平天下,枉爲男兒大丈夫。
注意事項:ele["on" + evtName]與ele.onclick綁定的方式會層疊到以前的事件函數
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <button>點擊</button> <script> var btn=document.getElementsByTagName("button")[0]; btn.onclick=function () { console.log("你是美人"); } btn["onclick"]=function () { console.log("謝謝呀"); } </script> </body> </html>
//謝謝呀
三、addEventListener原理:之因此能夠不層疊以前註冊事件,主要是判斷以前是否註冊了此類事件,若是註冊了就先執行此事件spa
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <button>點擊</button> <script> var btn = document.getElementsByTagName("button")[0]; btn.onclick = function () { console.log("你是美人"); } addEvent(btn, "click", fn); function addEvent(ele, evtName, fn) { var oldEvnet = ele["on" + evtName];//若是進入綁定事件自己,那麼該事件已經本綁定了,因此獲取舊的事件必須在新的事件綁定以前 ele["on" + evtName] = function () { //若是沒有被定義過事件該事件源的該事件屬性應該是null對應的boolean值是false //若是已經定義過事件該事件源的該事件屬性應該是function自己對應的boolean值是true if (oldEvnet) { oldEvnet();//由於oldEvent自己他就是函數自己,那麼後面加一個();就是執行函數 fn(); } else { fn(); } } } function fn() { console.log("謝謝呀") } </script> </body> </html>
//你是美人 //謝謝呀
四、事件綁定的兼容寫法code
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <body> <button>賦詩</button> <script> var btn = document.getElementsByTagName("button")[0]; // 火狐谷歌IE9+支持addEventListener // btn.addEventListener("click",fn1); // btn.addEventListener("click",fn2); // IE678支持attachEvent // btn.attachEvent("onclick",fn1); // btn.attachEvent("onclick",fn2); //兼容寫法 EventListen = { addEvent: function (ele,fn,str) { //經過判斷調用的方式兼容IE678 //判斷瀏覽器是否支持該方法,若是支持那麼調用,若是不支持換其餘方法 if(ele.addEventListener){ //直接調用 ele.addEventListener(str,fn); }else if(ele.attachEvent){ ele.attachEvent("on"+str,fn); }else{ //在addEventListener和attachEvent都不存在的狀況下,用此代碼 ele["on"+str] = fn; } } } EventListen.addEvent(btn,fn1,"click") EventListen.addEvent(btn,fn2,"click") function fn1(){ console.log("九尺龍泉萬卷書,上天生我意何如。"); } function fn2(){ console.log("不能報國平天下,枉爲男兒大丈夫。"); } </script> </body> </html>
//九尺龍泉萬卷書,上天生我意何如。 //不能報國平天下,枉爲男兒大丈夫。
五、事件解綁方式htm
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <button>點擊</button> <script> var btn = document.getElementsByTagName("button")[0]; btn.onclick = function () { console.log("你是美人"); } btn.onclick = null; </script> </body> </html>
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <body> <button>賦詩</button> <script> var btn = document.getElementsByTagName("button")[0]; EventListen = { addEvent: function (ele, fn, str) { //經過判斷調用的方式兼容IE678 //判斷瀏覽器是否支持該方法,若是支持那麼調用,若是不支持換其餘方法 if (ele.addEventListener) { //直接調用 ele.addEventListener(str, fn); } else if (ele.attachEvent) { ele.attachEvent("on" + str, fn); } else { //在addEventListener和attachEvent都不存在的狀況下,用此代碼 ele["on" + str] = fn; } }, removeEvent: function (ele, fn, str) { if (ele.removeEventListener) { ele.removeEventListener(str, fn); } else if (ele.detachEvent) { ele.detachEvent("on" + str, fn); } else { ele["on" + str] = null; } } } EventListen.addEvent(btn, fn, "click"); EventListen.removeEvent(btn, fn, "click"); function fn() { alert(1); } </script> </body> </html>
注意事項:ele.onclick只能用ele.onclick=null,removeEvent只能解綁addEventListener,detachEvent只能解綁attachEvent。blog