<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Javascript事件監聽</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> </head> <body> <button id="Button1">測試</button> <script type="text/javascript"> function addEventHandler(target, type, func) { if (target.addEventListener) target.addEventListener(type, func, false); else if (target.attachEvent) target.attachEvent("on" + type, func); else target["on" + type] = func; } function removeEventHandler(target, type, func) { if (target.removeEventListener) target.removeEventListener(type, func, false); else if (target.detachEvent) target.detachEvent("on" + type, func); else delete target["on" + type]; } var Button1 = document.getElementById("Button1"); var test1 = function () { alert(1); }; function test2() { alert("2") } addEventHandler(Button1, "click", test1); addEventHandler(Button1, "click", test2); addEventHandler(Button1, "click", function () { alert("3"); }); addEventHandler(Button1, "click", function () { alert("4"); }); removeEventHandler(Button1, "click", test1); removeEventHandler(Button1, "click", test2); removeEventHandler(Button1, "click", function () { alert("3"); }); </script> </body> </html>
彈出3,4javascript
解除綁定事件的時候必定要用函數的句柄,把整個函數寫上是沒法解除綁定的。html
因此3沒有解除java
添加函數
console.dir(Button1); console.dir(Button1["onclick"]); console.dir(Button1.onclick); console.dir(Button1.onclick());
Button1.onclick = function () { alert("hongda"); } Button1.onclick = function () { alert("hongda2"); } Button1.onclick = function () { alert("hongda3"); }
點擊時彈出3,4,hongda3測試
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Javascript事件監聽</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> </head> <body> <button id="Button1">測試</button> <script type="text/javascript"> function addEventHandler(target, type, func) { if (target.addEventListener) target.addEventListener(type, func, false); else if (target.attachEvent) target.attachEvent("on" + type, func); else target["on" + type] = func; } function removeEventHandler(target, type, func) { if (target.removeEventListener) target.removeEventListener(type, func, false); else if (target.detachEvent) target.detachEvent("on" + type, func); else delete target["on" + type]; } var Button1 = document.getElementById("Button1"); var test1 = function () { alert(1); }; function test2() { alert("2") } addEventHandler(Button1, "click", test1); addEventHandler(Button1, "click", test2); addEventHandler(Button1, "click", function () { alert("3"); }); addEventHandler(Button1, "click", function () { alert("4"); }); removeEventHandler(Button1, "click", test1); removeEventHandler(Button1, "click", test2); removeEventHandler(Button1, "click", function () { alert("3"); }); Button1.onclick = function () { alert("hongda"); } Button1.onclick = function () { alert("hongda2"); } Button1.onclick = function () { alert("hongda3"); } console.dir(Button1); console.dir(Button1["onclick"]); console.dir(Button1.onclick); console.dir(Button1.onclick()); </script> </body> </html>
彈出3,4,hongda3ui
Button1.onclick();
只彈出hongda3spa
若是隻有監聽器,不用Button1.onclick=function(){}firefox
那麼調用Button1.onclick();code
可見事件監聽器與對應的對象的事件屬性是分開的,只在事件觸發時調用,xml
若是有事件屬性就只調用事件屬性,且只調用最後一個
若是沒有事件屬性,那就調用事件監聽器,所有一個一個的調用。
fireEvent,ie中有的,firefox中沒有
與onclick的區別是
若是沒有給事件屬性onclick賦值方法,Button1.fireEvent("onclick")不執行,但也不會報錯,它跟onclick同樣也不調用事件監聽