我未來追加的元素 是 ajax拼接的
我的on是這樣寫的
$("td").on("click","a",function(){ alert("Aha!"); });
這是 頁面的標籤
<td><a class="topic_a" href="#creat" name='${data.context }'>选择</a></td>
ajax拼接標籤和上面標籤一模一樣的 。
但我拼接的標籤點擊沒有效果。
為什麼啊?
請確保 你用on綁定的時候 td 已經存在與dom中了..
還有..為什麼live 可以 因為live 是綁定在docuement上的..任何時候 document都是存在的..
你用的on 你的事件是綁定在td上的..如果當td不存在的時候 肯定就綁定不上了
請多了解 事件代理機制.
用delegate來替換吧
未來追加的元素中包含 b6c5a531a458a2e790c1fd6421739d1c 麼?
包含 b6c5a531a458a2e790c1fd6421739d1c 的話就不能在 $("td")上綁定事件代理程式。
應該在更上層的元素上綁定事件代理
例如f5d188ed2c074f8b944552db028f98a1或f5d188ed2c074f8b944552db028f98a1的父元素
實在不行在body或document上綁定也可以
如
$("body").on("click","a",function(){ alert("Aha!"); });
用on bind 這種。
先拼接,然後再加入到頁面上,接下裡在綁定事件。
js裡面,一樣是逐行讀取的。
綁定事件寫在前面,之後來新增的td,當然就不會有這個事件。
同時確保,td已經寫入到頁面當中。
live方法是舊版的jquery才有,on方法只能使用在頁面上已有的標籤;
想取得未來元素,只能用delegate方法了,具體寫法如下:
//div是页面已经有的元素,button是js生成的未来元素! $("div").delegate("button","click",function(){ $("p").slideToggle(); });
$(document).on('click', 'td a', function() { alert("Aha!"); });
$("body").delegate("td","click",function(){ alert("ok!"); });
請確保 你用on綁定的時候 td 已經存在與dom中了..
還有..為什麼live 可以 因為live 是綁定在docuement上的..任何時候 document都是存在的..
你用的on 你的事件是綁定在td上的..如果當td不存在的時候 肯定就綁定不上了
請多了解 事件代理機制.
你這樣寫吧
$("body").on("click","td a.topic_a",function(){ alert("Aha!"); });
未來追加的元素中包含 b6c5a531a458a2e790c1fd6421739d1c 麼?
包含 b6c5a531a458a2e790c1fd6421739d1c 的話就不能在 $("td")上綁定事件代理程式。
應該在更上層的元素上綁定事件代理
例如f5d188ed2c074f8b944552db028f98a1或f5d188ed2c074f8b944552db028f98a1的父元素
實在不行在body或document上綁定也可以
如
$("body").on("click","a",function(){ alert("Aha!"); });
以上是jquery中live方法換on方法出現問題的解決方法詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!