歡迎來到 常識詞典網 , 一個專業的常識知識學習網站!
[ Ctrl + D 鍵 ]收藏本站
答案 1:
bind() 是直接綁定在元素上,而 live() 是通過冒泡的方式來綁定到元素上。舉兩個應用場景來說明他們的存在:第一、有一個按鈕,你想要用他來在點擊的時候通過 AJAX 提交 form 的請求。因為這里只有一個按鈕,只綁定一次,你并不需要冒泡這種更費力費資源的方式來冒泡到 document 再指定這個元素。第二、在一個有 20個以上,甚至更多個 li 的 ul 列表中,要讓每一個 li 點擊的時候都去觸發相應函數的時候。如果給每個 li 都綁定一個 click 事件,這樣是不是很蛋疼?這時通過 live()(當然更好是用 delegate() 這樣的方法,可以指定一個離 li 更近的父節點),其實只在 document 上綁定一次 click() 事件,你省了 19 次綁定。這是多省內存的事。對吧?另外,有同學說兩個會合起來,看完上面的解釋,你覺得呢?哈哈。場景不同,我們需要選擇不同的方式來解決問題,他們提供出來就是為了方便這種不同場景的應用,所以不應該被合并,也不會被合并。答案 2:
本身兩個提供的功能并不完全一樣,正如文檔中說的,.bind()只能對已有的元素綁定事件,而.live()能對未來插入的元素綁定事件。從jQuery發展歷史來說,.bind()是從1.0版開始就已經提供了的,這是對事件綁定提供一個統一的接口。而后在1.3版之后,才提供了.live()。為了給事件綁定提供更多靈活性。當然,確實有可能在未來某個版本中合并成一個,通過給bind增加一個參數,-調用live,來完成live的功能。但目前從1.4.3里新增的那個參數來看,似乎近期內不太可能了……答案 3:
Best answer is -ere:alfajango/blog... , don"t trust city legend.答案 4:
不一樣,live()可以實現動態綁定。例如:$elem.bind("click",fn)時候,所有的$elem點擊都會觸發fn,但是當我新插入一個節點$elem時,新節點并沒有綁定click事件。live()就具備這樣的功能。答案 5:
性能神馬的都是浮云 (因為 jQuery 優化得很不錯), 重點是 1.4.4 前的 live() 的不支持 stopPropagation()jsfiddle.net/J4eUb/2/至于用哪一個是根據應用場景來區分的, 沒有通用的規則答案 6:
live() 是委托,事實上是綁定在父元素上,而bind()就是綁定在指定元素上答案 7:
可以看看live/delegate的原理。blogjava.net/Hafeyang...答案 8:
1、bind是綁定已有元素,不支持動態綁定。live可以動態綁定事件2、1.4.4之前的live不支持stopPropagation(),bind支持。@C-ris3、其實有些時候可以用clone(true)實現動態的綁定,當然這只適合元素結構大致相同的情況。答案 9:
live()是jQuery 1.3中新增的方法。給所有當前以及 將來 會匹配的元素綁定一個事件處理函數(比如click事件)。也能綁定自定義事件。重點突出 “將來”。live()函數給所有當前以及將來(將來:可理解為用過ajax,js等插入的元素)會匹配的元素綁定一個事件處理函數。與bind()不同的是,live()一次只能綁定一個事件。答案 10:
粗淺的認為:給a元素bind()一個事件b后,dom又動態添加了一個a元素,這時候bind()到前一個a元素上的事件就出發不了。需要用到live()答案 11:
前面人已經說過了 live() 和 bind() 的區別了,我補充下,還有個 delegate() 的,小范圍的使用事件代理,用這個性能會比 live() 更好的答案 12:
一定要注意,如果重復綁定的話,很可能會執行多次效果。比如說每添加一個 都live一下,那么之前的 點擊一下會執行好幾次--------------------------------------補充 2011-8-22-----------------------------------------------------可能之前沒有說清楚。有的時候一段代-重復加載,比如$(document).ready(function(){ $("#somet-ing").live("click",function(){ alert(); });});這樣一段代碼有的時候需要重復的加載,比如google -p api調用的時候,比如做分布式web app的時候,代碼互相獨立,一旦這條語句重復出現,那么,當你點擊somet-ing的時候便會alert()兩次或多次。這是由jquery中live方式決定的,其會將這種數據結構以冒泡的方式壓入內存,每當新建一個dom他都會自動檢測,耗費資源、非常可能產生內存泄露!因為如果你中途remove掉了這個dom元素,按照jquery的源碼來看他是沒有先-之后解除live再刪除dom的,所以要小心。我的意思是,在使用jquery中,如果頁面是傳統的,當然遇不到這種現象,這也就是為什么很多人很奇怪我的看法,因為代碼都是單單出現一次被瀏覽器讀取。但是如果是動態代碼的情況,我個人推薦使用bind,雖然費事,但是可靠。答案 13:
live() 能取代 bind()么?答案 14:
不會,兩者功能不是一樣的,live使用了冒泡方式來判斷當前觸發事件的對象,用的場景會少很多,相比bind有性能問題!答案 15:
live() 是針對執行時尚未加入dom tree的元素而設,是bind() 的拓展下一篇:你喜歡知乎? 下一篇 【方向鍵 ( → )下一篇】
上一篇:如何讓新浪徹底刪除自建微博賬號? 上一篇 【方向鍵 ( ← )上一篇】
快搜