首頁  >  文章  >  web前端  >  jquery中live方法換on方法出現問題的解決方法詳解

jquery中live方法換on方法出現問題的解決方法詳解

黄舟
黄舟原創
2017-06-26 09:35:211368瀏覽

我未來追加的元素 是 ajax拼接的 
我的on是這樣寫的  

$("td").on("click","a",function(){
alert("Aha!");
});

這是 頁面的標籤

#
<td><a class="topic_a" href="#creat"  name=&#39;${data.context }&#39;>选择</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(&#39;click&#39;, &#39;td a&#39;, 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn