以前我們定義事件,比如為元素定義單擊事件是這樣寫的:
程式碼如下:
$(`input`).click(function () {
//處理程式碼
});
 

程式碼如下:
$(`.clickme`).bind(`click`, function() {
// Bound handler called.
});
 

但是這隻能是對已經載入好的元素定義事件,那些後來新增插入的元素則需要另行繫結。即使你使用jquery的clone函式,它並不能將事件也複製(到目前為止我還不清楚它是為什麼這樣定義,是沒法複製還是刻意這麼處理,以防止出現某些異常,這還有待去分析一下jquery的原始碼)。
現在,使用live你可以輕鬆搞定,

$(`.clickme`).live(`click`, function() { // Live handler called. });這樣,你即使在後面動態插入的元素,也會被繫結事件,$(`body`).append(`<div class=”clickme”>Another target</div>`);

定義和用法

live() 方法為被選元素附加一個或多個事件處理程式,並規定當這些事件發生時執行的函式。

通過 live() 方法附加的事件處理程式適用於匹配選擇器的當前及未來的元素比如由指令碼建立的新元素)。

 

問題:使用jQuery的live()方法繫結事件,有時會出現重複繫結的情況,如,當點選一個按鈕時,此按鈕所繫結的事件會並執行n遍。

解決:使用die()方法,在live()方法繫結前,將此元素上的前面被繫結的事件統統解除,然後再通過live()方法繫結新的事件。

 

Js程式碼
  1. //先通過die()方法解除,再通過live()繫結
  2. $(“#selectAll”).die().live(“click”,function(){
  3. //事件執行程式碼
  4. });

die()方法簡介:

 

Js程式碼

die([type], [fn])<SPAN style=“WHITE-SPACE: normal”> </SPAN>

die([type], [fn])

概述

jQuery 1.3新增。此方法與live正好完全相反。

如果不帶引數,則所有繫結的live事件都會被移除。

你可以解除用live註冊的自定義事件。

如果提供了type引數,那麼會移除對應的live事件。

如果也指定了第二個引數function,則只移出指定的事件處理函式。