這篇文章主要介紹了js事件監聽器用法,以實例形式較爲詳細的分析了javascript事件監聽器使用注意事項與相關技巧,須要的朋友能夠參考下
本文實例講述了js事件監聽器用法。分享給你們供你們參考。具體分析以下:javascript
一、當同一個對象使用.onclick的寫法觸發多個方法的時候,後一個方法會把前一個方法覆蓋掉,也就是說,在對象的onclick事件發生時,只會執行最後綁定的方法。而用事件監聽則不會有覆蓋的現象,每一個綁定的事件都會被執行。以下:html
window.onload = function(){
var btn = document.getElementById("yuanEvent");
btn.onclick = function(){
alert("第一個事件");
}
btn.onclick = function(){
alert("第二個事件");
}
btn.onclick = function(){
alert("第三個事件");
}
}java
最後只輸出:第三個事件,由於後一個方法都把前一個方法覆蓋掉了。瀏覽器
原生態的事件綁定函數addEventListener:函數
var eventOne = function(){
alert("第一個監聽事件");
}
function eventTwo(){
alert("第二個監聽事件");
}
window.onload = function(){
var btn = document.getElementById("yuanEvent");
//addEventListener:綁定函數
btn.addEventListener("click",eventOne);
btn.addEventListener("click",eventTwo);
}測試
輸出:第一個監聽事件 和 第二個監聽事件ui
二、採用事件監聽給對象綁定方法後,能夠解除相應的綁定,寫法以下:.net
var eventOne = function(){
alert("第一個監聽事件");
}
function eventTwo(){
alert("第二個監聽事件");
}
window.onload = function(){
var btn = document.getElementById("yuanEvent");
btn.addEventListener("click",eventOne);
btn.addEventListener("click",eventTwo);
btn.removeEventListener("click",eventOne);
}htm
輸出:第二個監聽事件對象
三、解除綁定事件的時候必定要用函數的句柄,把整個函數寫上是沒法解除綁定的。
錯誤寫法:
btn.addEventListener("click",function(){
alert(11);
});
btn.removeEventListener("click",function(){
alert(11);
});
正確寫法:
btn.addEventListener("click",eventTwo);
btn.removeEventListener("click",eventOne);
總結:對函數進行封裝後的監聽事件以下,兼容各大主流瀏覽器。
/*
* addEventListener:監聽Dom元素的事件
*
* target:監聽對象
* type:監聽函數類型,如click,mouseover
* func:監聽函數
*/
function addEventHandler(target,type,func){
if(target.addEventListener){
//監聽IE9,谷歌和火狐
target.addEventListener(type, func, false);
}else if(target.attachEvent){
target.attachEvent("on" + type, func);
}else{
target["on" + type] = func;
}
}
/*
* removeEventHandler:移除Dom元素的事件
*
* target:監聽對象
* type:監聽函數類型,如click,mouseover
* func:監聽函數
*/
function removeEventHandler(target, type, func) {
if (target.removeEventListener){
//監聽IE9,谷歌和火狐
target.removeEventListener(type, func, false);
} else if (target.detachEvent){
target.detachEvent("on" + type, func);
}else {
delete target["on" + type];
}
}
var eventOne = function(){
alert("第一個監聽事件");
}
function eventTwo(){
alert("第二個監聽事件");
}
window.onload = function(){
var bindEventBtn = document.getElementById("bindEvent");
//監聽eventOne事件
addEventHandler(bindEventBtn,"click",eventOne);
//監聽eventTwo事件
addEventHandler(bindEventBtn,"click",eventTwo );
//監聽自己的事件
addEventHandler(bindEventBtn,"click",function(){
alert("第三個監聽事件");
});
//取消第一個監聽事件
removeEventHandler(bindEventBtn,"click",eventOne);
//取消第二個監聽事件
removeEventHandler(bindEventBtn,"click",eventTwo);
}
實例:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Event</title>
<script type="text/javascript">
function addEventHandler(target,type,func){
if(target.addEventListener){
//監聽IE9,谷歌和火狐
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){
//監聽IE9,谷歌和火狐
target.removeEventListener(type, func, false);
} else if (target.detachEvent){
target.detachEvent("on" + type, func);
}else {
delete target["on" + type];
}
}
var eventOne = function(){
alert("第一個監聽事件");
}
function eventTwo(){
alert("第二個監聽事件");
}
window.onload = function(){
var bindEventBtn = document.getElementById("bindEvent");
//監聽eventOne事件
addEventHandler(bindEventBtn,"click",eventOne);
//監聽eventTwo事件
addEventHandler(bindEventBtn,"click",eventTwo );
//監聽自己的事件
addEventHandler(bindEventBtn,"click",function(){
alert("第三個監聽事件");
});
//取消第一個監聽事件
removeEventHandler(bindEventBtn,"click",eventOne);
//取消第二個監聽事件
removeEventHandler(bindEventBtn,"click",eventTwo);
}
</script>
</head>
<body>
<input type="button" value="測試" id="bindEvent">
<input type="button" value="測試2" id="yuanEvent">
</body>
</html>
轉自:http://www.jb51.net/article/67051.htm