jQuery推出on()的目的有2個,一是為了統一接口,二是為了提高性能,
所以從現在開始用on()替換bind(), live(), delegate吧。
尤其是不要再用live()了,因為它已經處于不推薦使用列表了[1.7+已經被刪除]。
如果只綁定一次事件,那接著用one()吧,這個沒有變化。
?
on(events,[selector],[data],fn)
- events:一個或多個用空格分隔的事件類型和可選的命名空間,如"click"或"keydown.myPlugin" 。
- selector:一個選擇器字符串用于過濾器的觸發事件的選擇器元素的后代。如果選擇器為null或省略,當它到達選定的元素,事件總是觸發。
- data:當一個事件被觸發時要傳遞event.data給事件處理函數。
- fn:該事件被觸發時執行的函數。 false 值也可以做一個函數的簡寫,返回false。
替換bind()
當第二個參數'selector'為null時,on()和bind()其實在用法上基本上沒有任何區別了,所以我們可以認為on()只是比bind()多了一個可選的'selector'參數,所以on()可以非常方便的替換掉bind()
?
最后有一點,原先的live()方法,處理函數是默認綁定在document對象上不能變的,如果DOM嵌套結構很深,事件冒泡通過大量祖先元素會導致較大的性能損失。而使用.on()
方法,事件只會綁定到$()
函數的選擇符表達式匹配的元素上,因此可以精確地定位到頁面中的一部分,而事件冒泡的開銷也可以減少。delegate()與on()同理,畢竟是用on()實現的。