事件處理常式
有三種方式給元素繫結事件處理函數。
a、HTML 屬性
<a onclick="alert(‘click‘)"></a>
這樣使用在函數裡面直接可以調用event,this指向當前元素。但是這種方式一般不適用。
b、js中元素屬性
這種方式的相容性好,所有瀏覽器都支援。但是有一個相容性問題。那就是ie8-的事件對象是作為window的屬性而不是作為參數傳進去的。所以要像下面這樣寫。<!doctype html><html lang="en"><head> <meta charset="UTF-8"> <title>Document</title></head><body> <a href="##" id="a" style="display:block;width:100px;height:100px;background-color: #ccc;"></a> <script> document.getElementById(‘a‘).onclick = function(event){ event = event || window.event; alert(event); } </script></body></html>
c、DOM2事件綁定
主要指的是元素的addEventListener()和removeEventListener()。前者綁定,後者刪除。
這兩個函數都有三個參數,
第一個是事件類型,有click,focus,blur等
第二個是事件處理函數。
第三個是個布爾值,true代表在捕獲階段調用處理函數,false代表在冒泡階段調用處理函數。
要綁定事件:
<!doctype html><html lang="en"><head> <meta charset="UTF-8"> <title>Document</title></head><body> <a href="##" id="a" style="display:block;width:100px;height:100px;background-color: #ccc;"></a> <script> document.getElementById(‘a‘).addEventListener(‘click‘,function(event){ alert(event); },false) </script></body></html> 假如想解除綁定,有人可能會這樣:
<!doctype html><html lang="en"><head> <meta charset="UTF-8"> <title>Document</title></head><body> <a href="##" id="a" style="display:block;width:100px;height:100px;background-color: #ccc;"></a> <script> document.getElementById(‘a‘).addEventListener(‘click‘,function(event){ alert(event); },false) document.getElementById(‘a‘).removeEventListener(‘click‘,function(event){ alert(event); },false) </script></body></html>但是這樣是不會成功的。因為函數是一個對象,兩個匿名函數是不同的對象,不相等。所以匿名函數是沒辦法解除綁定的。只能想下面這個,個函數一個名號。
<!doctype html><html lang="en"><head> <meta charset="UTF-8"> <title>Document</title></head><body> <a href="##" id="a" style="display:block;width:100px;height:100px;background-color: #ccc;"></a> <script> var handler = function(event){ alert(event); } document.getElementById(‘a‘).addEventListener(‘click‘,handler,false) document.getElementById(‘a‘).removeEventListener(‘click‘,handler,false) </script></body></html> ie8-的瀏覽器不支援DOM2級事件,但是有類似的方法attachEvent()和detachEvent();用法上是一樣的,只是因為ie8-只有冒泡過程所以就沒有第三個參數。還有第一個參數要加個‘on’,比如click事件是‘onclick‘。另外,函數內this指向window。