一.HTML事件處理程序
<input id="btn" type="button" value="按鈕" onclick="showMsg()">
缺點:高耦合,修改事件的時候需要同時修改js和HTML頁面
二.DOM0級事件
//添加事件
var btn = document.getElementById('btn');
btn
.onclick = function(){
alert('Hello World!');
}
//刪除事件
btn.onclick = null;
三.DOM2級事件
瀏覽器支持
表格中的數字表示支持該方法的第一個瀏覽器的版本號。
方法 | |||||
---|---|---|---|---|---|
addEventListener() | 1.0 | 9.0 | 1.0 | 1.0 | 7.0 |
注意: Internet Explorer 8 及更早IE版本不支持 addEventListener() 方法,,Opera 7.0 及 Opera 更早版本也不支持。 但是,對於這些不支持該函數的瀏覽器,你可以使用 attachEvent() 方法來添加事件句柄 (查看 "更多實例" 瞭解跨瀏覽器的解決方案)。
語法
element.addEventListener(event, function, useCapture)
參數值
參數 | 描述 |
---|---|
event |
必須。字符串,指定事件名。 注意: 不要使用 "on" 前綴。 例如,使用 "click" ,而不是使用 "onclick"。 提示: 所有 HTML DOM 事件,可以查看我們完整的 HTML DOM Event 對象參考手冊。 |
function |
必須。指定要事件觸發時執行的函數。 當事件對象會作爲第一個參數傳入函數。 事件對象的類型取決於特定的事件。例如, "click" 事件屬於 MouseEvent(鼠標事件) 對象。 |
useCapture |
可選。布爾值,指定事件是否在捕獲或冒泡階段執行。 可能值:
|
var btn = document.getElementById('btn');
function DOM2test = function(){
alert('test1');
}
function DOM2test2 = function(){
alert('test2');
}
btn.addEventListener('click',DOM2test1,false);
//可以添加多個事件
btn.addEventListener('click',DOM2test2);
//執行結果,按順序彈窗test1、test2
//刪除事件
btn.removeEventListner('click',DOM2test1,false);//需要指定刪除的具體方法
4.IE事件處理
語法
element.attachEvent(event, function)
使用方法和DOM2級事件差不多,但是在傳入的參數中沒有第三個布爾值變量,因爲在IE8版本之前是隻支持冒泡事件的,所以這裏默認爲冒泡事件。
另一個區別是event這裏必須使用"on",比如點擊事件就是onclick。
btn.attachEvent('onclick',showMsg());
//刪除事件
btn.detachEvent('onclick',showMsg());
5.跨瀏覽器的事件處理程序
var eventUtil = {
//添加句柄
//支持DOM2級、IE、DOM0級
addHandler: function (element, type, handler) {
if (element.addEventListener) { //DOM2級
element.addEventListenter(type, handler, false);
}
else if (element.attachEvent) { //IE
element.attachEvent('on' + type, handler);
} else { //DOM0級
element['on' + type] = handler;
}
},
//刪除句柄
removeHandler: function (element, type, handler) {
if (element.romoveEventListener) {
element.romoveEventListenter(type, handler, false);
}
else if (element.detachEvent) {
element.detachEvent('on' + type, handler);
} else {
element['on' + type] = null;
}
}
}
//測試
eventuntil.addHandler(btn, 'click', showMsg());
//刪除
eventuntil.removeHandler(btn, 'click', showMsg());