jquery 事件,注冊 與重復事件處理


jquery有時候會出現重復注冊一個事件的問題,導致點擊一個事件,這個事件被重復執行,也就是觸發事件的次數有幾次,

那么這個事件就會被執行疊加重復幾次。

我這邊做的一個項目,在某個頁面初始化的時候,給一個控件注冊了一個事件,后來發現,進入幾次這個頁面,因為進入頁面會執行一次注冊,這個事件就會被注冊幾次,被重復執行,沒有覆蓋。

上網查詢了一下,總結了以下幾種情況:

1,通過 on方法注冊的事件,每次的注冊不會把原來的方法覆蓋掉。會以隊列的形式保存起來
點擊的時候,觸發事情會一個個按注冊的順序執行。

function initOnEvent(){
//為id為onWayToEvent 按鈕注冊點擊事件
$("#onWayToEvent").on("click",function(){
alert("this is one on event")
});
$("#onWayToEvent").on("click",function(){
alert("this is two on event")
});
$("#onWayToEvent").on("click",function(){
alert("this is three on event")
});
}

2,通過bind的方法多次注冊事件。通過 jquery 的bind方法多次注冊的方法也是一樣,不會把原來的方法覆蓋了,也是把方法以
隊列的形式保存起來,觸發事件后按注冊次序逐個執行。

function initBindEvent(){
//為id為bindWayToEvent 的按鈕注冊點擊事件
$("#bindWayToEvent").bind("click",function(){
alert("this is registry event by bind. one")
});

$("#bindWayToEvent").bind("click",function(){
alert("this is registry event by bind. two")
});

$("#bindWayToEvent").bind("click",function(){
alert("this is registry event by bind. three")
});
}
</div>

3,通過click方法多次注冊事件。通過 jquery 的click方法多次注冊的方法也是上面的效果一樣 。

function initClickvent(){
$("#clickWayToEvent").click(function(){
alert("this is registry event by click. one");
});

$("#clickWayToEvent").click(function(){
alert("this is registry event by click. two");
});
$("#clickWayToEvent").click(function(){
alert("this is registry event by click. three");
});
}

4,通過live 方法多次注冊事件

 

要怎么樣才能把前面的事件給覆蓋掉,只保留最后注冊的事件方法?

1,通過unbind,bind方法進行事件的唯一注冊

$("#oneEvnetByBind").unbind("click").bind("click",function(){
alert("only you !!!!!!!");
});

2,通過 die live 方法進行事件的唯一加載

$("#oneEvnetByDieLive").die().live("click",function(){

alert("the one of you !!!!!!");
});

 3,off() 方法通常用於移除通過 on() 方法添加的事件處理程序。

$("button").click(function(){
$("p").off("click");
});

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM