您好,登錄后才能下訂單哦!
今天在寫(xiě)一個(gè)項(xiàng)目的時(shí)候突然發(fā)現(xiàn)一個(gè)很怪異的問(wèn)題,問(wèn)題是這樣的:
當(dāng)我使用ajax去后臺(tái)請(qǐng)求數(shù)據(jù)就將后臺(tái)拼接生成的html代碼直接添加到頁(yè)面中了,但是在后續(xù)操作中發(fā)現(xiàn),生成的html代碼綁定的click不起作用,但是換成onclick=“click()”的話就可以了。
出現(xiàn)的原因是:
因?yàn)橄群箜樞虻年P(guān)系啊~用AJAX加載是異步加載這個(gè)應(yīng)該很清楚吧~既然是異步加載那么就是非同步的,
也就是說(shuō)當(dāng)你的整個(gè)頁(yè)面加載完成后$('.div').click(function(){.....});
這句根本找不到你異步加載的DIV,所以它就不會(huì)執(zhí)行了,即使你之后再把<div class="div">div</div>
這個(gè)加載進(jìn)來(lái),在瀏覽器也不會(huì)找到這個(gè)DIV的,因?yàn)闉g覽器在第一次加載的時(shí)候沒(méi)有找到它,
并且瀏覽器在你加載進(jìn)這個(gè)DIV來(lái)之后也不會(huì)重新渲染一次,所以找不到。
而你加載進(jìn)來(lái)的<div onclick=dofun("prameter")>div</div>,是它去找的這個(gè)函數(shù),而dofun這個(gè)函數(shù)
是之前就被瀏覽器渲染過(guò)了,只是還沒(méi)有調(diào)用,而你新加載進(jìn)來(lái)的DIV正好要調(diào)用之前就已經(jīng)渲染好的
函數(shù),所以就可以使用了~
更多的解釋?zhuān)?br />
因?yàn)?('.div').click(function(){.....}); 是在 ajax加載出來(lái)之后才執(zhí)行的;而且,如果沒(méi)找到對(duì)象,調(diào)試時(shí)應(yīng)該報(bào)錯(cuò)才對(duì),但是又沒(méi)報(bào)錯(cuò)。這是因?yàn)槟阌胊jax加載的是<div class="div">div</div>這個(gè)!但是瀏覽器在第一次加載渲染的時(shí)候沒(méi)有找到<div class="div">div</div>這個(gè),所以你的那個(gè)$('.div').click(function(){.....});在瀏覽器第一次加載的時(shí)候是不會(huì)找到 class="div"的這個(gè)層的,所以就當(dāng)沒(méi)找到對(duì)象跳過(guò)去了,但是語(yǔ)法上又沒(méi)有錯(cuò)誤,所以它不會(huì)報(bào)錯(cuò),至于你說(shuō)的沒(méi)找到對(duì)象也沒(méi)有報(bào)錯(cuò)那是因?yàn)?('.div').click(function(){.....});這句根本就沒(méi)有執(zhí)行,所以不存在查找對(duì)象的問(wèn)題,自然就不報(bào)錯(cuò)了~JS瀏覽器只加載一次,并且注冊(cè)一些對(duì)應(yīng)的事件,當(dāng)?shù)谝淮巫?cè)找不到對(duì)應(yīng)的元素時(shí)就會(huì)被瀏覽器忽略,之后及時(shí)你再加載元素進(jìn)來(lái)也不會(huì)再重新加載一次JS了,除非你刷新。所以你的$('.div').click(function(){.....}); 這句算是JS,所以瀏覽器只加載一次。所以不管用了
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。