2012-06-26 38 views
0

從綁定()jQuery的API:不應該使用bind(),那麼快捷方式呢?

在jQuery 1.7中,。對()方法是用於 事件處理程序安裝到一個文件的優選方法。

而且從變化()jQuery的API:

此方法是.bind快捷方式( '改變',處理程序)。

但是沒有提到change()不能像bind()中說的那樣使用。

作爲jQuery 1.7使用on()而不是bind()是否有任何實際的好處?從jQuery 1.7開始,使用bind()或on()方法的change()和類似的快捷方式是什麼?最終,我應該使用change()還是on()?

在此先感謝。

+3

'bind()'是**不**過時。已棄用*與「首選」不同*。 ['live()'](http://api.jquery.com/live)是當前不推薦使用的*** only ***事件方法。 ['change()'是'on('change')']的別名(https://github.com/jquery/jquery/blob/754bda21cbc5c9044daf7f968fb9b4ffae39e334/src/event.js#L1040-1067),所以使用'如果需要,可以改變()'(或'bind()',因爲它不被棄用)。 – Matt

+1

可能的重複(以噸的問題):http://stackoverflow.com/questions/8065305/whats-the-difference-between-on-and-live-or-bind。 – VisioN

+0

謝謝VisioN。就是這樣。 – bluehallu

回答

1

shortcut methods(例如.change())只需撥打bind內部:

jQuery.each(("blur focus focusin focusout load resize scroll unload click dblclick " + 
"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + 
"change select submit keydown keypress keyup error contextmenu").split(" "), function(i, name) { 

    // Handle event binding 
    jQuery.fn[ name ] = function(data, fn) { 
     if (fn == null) { 
      fn = data; 
      data = null; 
     } 

     return arguments.length > 0 ? 
      this.bind(name, data, fn) : //Just call `bind` 
      this.trigger(name); 
    }; 
    //... 

而且bind簡單地調用on

//... 
bind: function(types, data, fn) { 
    return this.on(types, null, data, fn); //Just call `on` 
}, 
//... 

因此它可能是很輕微更快地只是調用on自己。實際上,速度沒有區別,所以只需使用你最喜歡的那個。

+0

但缺點是你使用的是字符串。例如,當你拼寫錯誤(拼寫錯誤?)字符串時沒有錯誤。 – Esailija

+0

@Esailija:但是你的'change'事件處理程序也不會觸發......應該很明顯地發現:P。 – Matt

+1

@Matt我的意思是在一個更普遍的情況下比一個簡單的單一變更處理程序...如果你有一個比這更復雜的項目呢?取決於你在處理程序中擁有什麼,你必須確定處理程序是否不首先觸發,或者處理程序是否有邏輯錯誤,從而導致它無法執行任何操作。 – Esailija