2012-06-21 98 views
3

我一直在使用它們很長一段時間,但大多數時候,我更喜歡較短的一個,但是,我只是想深入瞭解這些細節,我可能一直在創建buggy代碼, 。不想作出貢獻,並在網上傳播懶洋洋地-DONE碼出

那麼,告訴我:

什麼顯著優勢/其中的缺點,或者是它 就像冰淇淋,不同口味但是相同的「感覺良好」效果?

鼓勵大家就此事發表專家意見。

非常感謝提前。

+2

的可能重複[jQuery的:$()點擊(FN)與$()綁定(「點擊」,FN);](HTTP://計算器。com/questions/518762/jquery-clickfn-vs-bindclick-fn)(其中答案也討論'on') – Thilo

+1

最好的答案是在文檔中:['bind()'](http://api.jquery .com/bind /),['click()'](http://api.jquery.com/click/)和['on()'](http://api.jquery.com/on/) )。 – VisioN

+1

@VisioN文檔實際上太冗長了,所以我發佈了這個問題,以便從該領域的專家那裏獲得精確,準確,獨特的信息。 –

回答

4

bind()在1.0中加入,在live() 1.3,delegate()在1.4.2和on()在1.7。

從1.7開始on()是首選用途,live()已棄用,根本不推薦。 如果您使用1.3使用bind()而不是live(),並且使用了從1.4.2使用delegate()而不是live(),並且使用的是使用on()而不是其他任何其他使用。對於$("selector").click。從click()documentation採取:

在第一兩種變化,這種方法的快捷方式 .bind(「點擊」,處理程序),以及用於。對(「點擊」,處理程序),作爲 jQuery 1.7。在第三種變體中,當調用.click()而沒有 參數時,它是.trigger(「click」)的快捷方式。

爲什麼使用on()而不是其他的?
on()是最新加入的,加入了1.7版本的jQuery庫。 on()有幾個方法簽名使它能夠提供以前版本的相同結果,但進行了改進和優化。從documentation引證:

在jQuery 1.7中,。對()方法提供用於附接的事件處理程序所需 所有功能。

有bascialy不再需要使用bind()delegate()了。當然它會起作用,並且在使用這些方法時應該沒有任何傷害,但是我總是會認爲最新的增加對以前版本的任何缺點進行了優化和改進(除非文檔另有說明,因爲它是在live()的情況下)。
基於此,我會建議使用on()來代替。

原因live()不建議全站式更多的是它的缺點。引用來自live()documentation。不再推薦

使用.live()方法,因爲後來 版本的jQuery的報價不具有其 缺點更好的方法。特別地,下面的問題出現在使用的 .live():

  • jQuery的嘗試調用.live()方法之前來檢索由選擇 指定的元素,其可以是耗時的上大號文件。
  • 不支持鏈接方法。例如,$(「a」)。find(「。offsite,.external」)。live(...);無效,並且 無法按預期工作。
  • 由於所有.live()事件都附加在文檔元素上,事件 在處理它們之前會採用最長和最慢的路徑。
  • 在移動的iOS(iPhone,iPad和iPod Touch)的單擊事件不 泡到文檔主體大多數元素和不能與 .live(),而不採用以下解決方法之一中使用:
    1. 使用本地可點擊的元素(如a或按鈕),因爲這兩個 都會冒泡到文檔中。
    2. 使用.on()或.delegate()附加到document.body, 級別以下的元素,因爲移動iOS在主體內確實有氣泡。
    3. 應用CSS樣式遊標:指向需要冒泡的元素的指針 點擊(或包含document.documentElement的父級)。但請注意, 這將禁用元素上的複製\粘貼,並使其在觸摸時高亮顯示爲 。
  • 在事件處理函數中調用event.stopPropagation()在 中停止附加在文檔中較低位置的事件處理程序;該事件已經傳播到文檔 。如果$(document).unbind(「click」)通過任何對.live()的調用附加的處理程序,則.live()方法將以其他事件方法與 令人驚訝的方式進行交互。

雖然文檔中還有很多好東西。

其他資源
click()
bind()
live() (don't use)
delegate()
on()

+0

現在,你給了我非常有趣的見解,謝謝。 –

+0

@DexterHuinda:你比歡迎。在所有jQuery方法中,我發現多個綁定變體在開始時是最令人困惑的。但在坐下來檢查他們被添加的版本後,我開始總是使用最新版本。 'live()'然而似乎是奇怪的,我總是被告知永遠不會使用jQuery版本。 – Nope

+0

是的,我從來沒有使用過live(),而且這個名字只是混淆了它真正服務的特定目的。 –

1

該特定情況下的功能沒有區別。然而,.on優於.bind,從jQuery 1.7開始,至於.click - 它只是普通事件處理程序的簡寫。

+0

爲什麼.on優先於.bind?任何重要的原因? –

+0

@DexterHuinda:我的猜測是,因爲它是綁定添加到jQuery庫的最新方法,所以它是目前最優化的。只是一個猜測。 – Nope

+0

@DexterHuinda:沒有線索。但我確實發現它看起來更好,親自=) – Ryan