在使用jquery中動(dòng)態(tài)新增的元素節(jié)點(diǎn)時(shí)會(huì)發(fā)現(xiàn)添加的事件是無(wú)法觸發(fā)的,我們下面就為各位來(lái)詳細(xì)的介紹此問(wèn)題的解決辦法.
比如做一個(gè)ajax讀取留言列表的時(shí)候,每條留言后面有個(gè)回復(fù)按鈕,class為“reply”,如果你用的是$(".reply").click(function(){ //do something... }),想必后面通過(guò)ajax加載進(jìn)來(lái)的列表中的回復(fù)按鈕,點(diǎn)擊事件會(huì)失效,其實(shí)最簡(jiǎn)單的方法就是直接在標(biāo)簽中寫onclick="",但是這樣寫其實(shí)是有點(diǎn)low的,最好的方式還是通過(guò)給類名綁定一個(gè)click事件。
解決jquery中動(dòng)態(tài)新增的元素節(jié)點(diǎn)無(wú)法觸發(fā)事件的問(wèn)題有兩種解決方法,如下,為了達(dá)到更好的演示效果,假設(shè)在某個(gè)頁(yè)面的body下有以下結(jié)構(gòu)的代碼:
方法一:使用live
live()函數(shù)會(huì)給被選的元素綁定上一個(gè)或者多個(gè)事件處理程序,并且規(guī)定當(dāng)這些事件發(fā)生時(shí)運(yùn)行的函數(shù),通過(guò)live()函數(shù)適用于匹配選擇器的當(dāng)前及未來(lái)的元素,比如,通過(guò)腳本動(dòng)態(tài)創(chuàng)建的元素,實(shí)現(xiàn)如下:
$('.liLabel').live('click', function(){ });
方法二:使用on
可以通過(guò)on方法綁定事件,可以綁定到它的父級(jí)或者body中,實(shí)現(xiàn)如下:
$("#ulLabel").on('click','.liLabel',function(){ });
//或者:
$("body").on('click','.liLabel',function(){ });