jquery中提供了四種事件監聽方式,分別是bind、live、delegate、on,對應的解除監聽的函式分別是unbind、die、undelegate、off。
可以向匹配的元素繫結乙個或者多個事件處理器。但是它不會在沒有存在dom樹中的元素繫結該事件;而live()、delegate()則可以實現在不存在dom樹中的元素繼續繫結事件.
live方法其實是bind方法的變種,其基本功能同bind方法的功能一樣都是為乙個元素繫結某個事件,但是bind方法只能給當前存在的元素繫結事件,對於事後採用js等方式新生成的元素無效,而live方法則正好彌補了bind方法的這個缺陷,它可以對後生成的元素也可以繫結相應的事件。
bind()的優點:
可以向匹配的元素繫結乙個或者多個事件處理器。
bind()的缺點:
它會繫結事件到所有的選出來的元素上,當元素很多時,會出現效率問題;
當頁面載入完的時候,你才可以進行bind();
它不會繫結到在它執行完後動態新增的那些元素上。
用到了事件委託的概念來處理事件的繫結,會繫結相應的事件到你所選擇的元素的根元素上,即是document元素上,一旦事件冒泡到document上,jquery將會查詢selector/event metadata,然後決定那個handler應該被呼叫。
live的優點:
僅有一次的事件繫結,繫結到document上;
動態新增的elemtns依然可以觸發那些早先繫結的事件,因為事件真正的繫結是在document上;
可以在document ready之前就可以繫結那些需要的事件。
live的缺點:
從jq1.7開始已經不被推薦了;
當乙個元素採用live方法進行事件的繫結的時候,如果想阻止事件的傳遞或冒泡,就要在函式中return false,僅僅呼叫stoppropagation()是無法實現阻止事件的傳遞或者冒泡的,因為都要到達document,所以速度也會非常慢;
有點像.live(),不同於.live()的地方在於,它不會把所有的event全部繫結到document,而是由你決定把它放在哪兒。而和.live()相同的地方在於都是用event delegation.
delegate的優點:
可以選擇把這個事件放到哪個元素上了,可以有效的減小你所要查詢的元素;
可以用在動態新增的元素上。
delegate的缺點:
需要查詢哪個元素上發生了那個事件,儘管比document少很多了,不過,還是得浪費時間來查詢。
其實.bind(), .live(), .delegate()都是通過.on()來實現的,.unbind(), .die(), .undelegate(),也是一樣的都是通過.off()來實現的。
on的優點:
提供了一種統一繫結事件的方法,可以用.on()來代替上述的3種方法。
one是在dom樹載入後,對元素的繫結,和bind一樣屬於後期繫結,但是會在事件執行之後移除元素的繫結事件,事件只執行一次。
on的缺點:
暫為收集
JQuery中事件繫結的四種方法及其優缺點
jquery中事件繫結的方法有bind live delegate on 1 bind bind type data fn bind,繫結到目標元素上,會將所有匹配的元素都繫結一次事件。因此,當元素很多時,後來動態新增的元素不會被繫結。例 foo bind click function 簡寫 foo...
with this 中with的用法及其優缺點
with語句擴充套件乙個語句的作用域鏈。with expression 將給定的expression新增到在statement使用的作用域鏈上。表示式周圍的括號是必需的 j ascript查詢某個未使用命名空間的變數時,會通過作用域鏈來查詢,作用域鏈是跟執行 的context或者包含這個變數的函式有...
jquery 事件繫結
1.bind bind 方法為被選元素新增乙個或多個事件處理程式,並規定事件發生時執行的函式。多個事件用空格分開 可以繫結的事件有click dblclick mouseover mouseout mousedown mouseup等滑鼠事件,至於鍵盤事件,嘗試沒發現效果。selector bind...