日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jQuery的.live()和.die()

發布時間:2023/12/9 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jQuery的.live()和.die() 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

很多開發者都知道jQuery的.live()方法,他們大部分知道這個函數做什么,但是并不知道是怎么實現的,所以用的并不那么舒適。而且他們卻從未聽過還有解除綁定的.live()事件的.die()方法。即使你熟悉這些,但是你意識到.die()了嗎?

什么是 .live()

.live方法類似于.bind(),除此之外,它允許你將事件綁定到DOM元素上,可以將事件綁定到DOM中還不存在的元素上,看看下面的例子:

比方說當用戶在點擊鏈接時及想提示他們正在離開站點。

?
1 2 3 4 5 6 $(document).ready(function() { $('a').click(function() { alert("You are now leaving this site"); return?true; }); });

注意,.click()僅僅是個實現更一般.bind()的簡單方法,下面和上面的代碼相當于上面的實現。

?
1 2 3 4 5 6 $(document).ready(function() { $('a').bind('click',function() { alert("You are now leaving this site"); return?true; }); });

但是現在通過javascript添加一個鏈接到頁面。

?
1 $('body').append('<div><a href="...">Check it out!</a></div>');

然而當用戶點擊那個鏈接是,方法將不會被調用,因為那個鏈接當你將click事件綁定到頁面的所有<a>節點時還并不存在,所以我們就用.live()替換.bind():

?
1 2 3 4 5 6 $(document).ready(function() { $('a').live('click',function() { alert("You are now leaving this site"); return?true; }); });

現在如果你添加一個新的鏈接到頁面上,綁定就也可以運行了。

.live() 如何工作

.live()背后神奇的地方就在于它并不將事件綁定到你選定的elements上,而實際上是綁定到了DOM樹的跟節點(例子中是$(document)),而是在element中就像一個參數一樣進行傳遞。

那么當你點擊一個元素時,click事件就會在DOM樹上往上傳遞,直至到達根節點。這個.click()事件的觸發器已經在根節點被.live()創建。這個觸發方法將首先檢測被點擊的目標看是否和.live()調用的選擇器相匹配。所以上面的例子中,會檢查點擊的元素是否和$('a').live()中的$('a')相匹配,如果匹配,那么綁定的方法就會執行了。

因為不管你在根節點內點擊了什么,根節點的.click()事件都會被觸發,當你點擊加入到根節點的任何元素時這個檢查都會發生。

所有.live() 都可以.die()

如果你知道.bind(),那么你肯定知道.unbind()。那么,.die()和.live()就是類似的關系了。為了接觸上面的綁定(不希望用戶點擊鏈接時彈出對話框),我們這么做:

?
1 $('a').die();

更具體點,如果還有其他的事件被綁定且需要保留,例如hover或其他,可以只解除click事件綁定。

?
1 $('a').die('click');

再具體些,如果已經定義了方法名,可以解除綁定指定的方法。

?
1 2 3 4 5 6 7 8 9 10 11 12 specialAlert =function() { alert("You are now leaving this site"); return?true; } $(document).ready(function() { $('a').live('click', specialAlert ); $('a').live('click', someOtherFunction ); }); // then somewhere else, we could unbind only the first binding $('a').die('click', specialAlert );

關于 .die()的問題

使用這些函數時,.die()方法會有一個缺點。只可以使用.live()方法中用到的元素選擇器,例如,不可以像下面這樣寫:

?
1 2 3 4 5 6 7 8 9 10 $(document).ready(function() { $('a').live('click',function() { alert("You are now leaving this site"); return?true; }); }); // it would be nice if we could then choose specific elements //?? to unbind, but this will do nothing $('a.no-alert').die();


.die()事件看起來好像是匹配到了目標選擇權并解除了.live()的綁定,但事實上,$('a.no-alert')并不存在綁定,所以jquery找不到任何綁定去去掉,就不會起作用了。

更糟的是下面這個:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 $(document).ready(function() { $('a,form').live('click',function() { alert("You are going to a different page"); return?true; }); }); // NEITHER of these will work $('a').die(); $('form').die(); // ONLY this will work $('a,form').die();

如何修復 .die()

在我下篇文章中,我將會建議一種.die()執行的新方法,它可以提供一個向后兼容的語氣的行為。或許我有時間的話會去建議jQuery核心開發團隊在下一個release中接受我的建議并進行修改,希望多一點我剛寫的這些方法,包括可選的context參數,允許自定義事件附加的節點,而不是根節點。

如果想得到更多的信息和例子,可以查查jQuery?.live()?and?.die().的文檔

同時注意下?.delegate()?和.undelegate(),他們可以替代.live()和.die(),它們聯系很緊密。

轉載于:https://my.oschina.net/u/861770/blog/102956

總結

以上是生活随笔為你收集整理的jQuery的.live()和.die()的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。