日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

直接用click不能為動(dòng)態(tài)元素綁定click事件?

 程序猿之家 2015-11-16
 本帖最后由 wuxiaolan91 于 2012-6-4 11:04 編輯



1.出現(xiàn)問題:   
  我們一般都是為已經(jīng)存在的元素去綁定事件,那么用同樣的綁定方法也能正確綁定動(dòng)態(tài)創(chuàng)建的元素嗎?

  我在我們孔明app的項(xiàng)目里動(dòng)態(tài)創(chuàng)建了一個(gè)元素,然后我又需要為這個(gè)元素綁定事件,要點(diǎn)擊這個(gè)動(dòng)態(tài)創(chuàng)建的元素的時(shí)候能夠在這個(gè)元素的右側(cè)復(fù)制這個(gè)元素出來
  1. $("動(dòng)態(tài)創(chuàng)建的元素").click(function(){
  2. console.log("事件已被綁定");
  3. ....
  4. }
復(fù)制代碼
。可是我用卻沒有半點(diǎn)反應(yīng),作為測試用的console語句的話不就是沒出來過,后來經(jīng)同事提點(diǎn):你這個(gè)(綁定事件的)元素是不是動(dòng)態(tài)創(chuàng)建的?


我就奇怪了,動(dòng)態(tài)創(chuàng)建的元素用click事件綁定就不行了嗎?

2.問題分析:
我換了on來綁定事件,結(jié)果還是不行(后來發(fā)現(xiàn)不是不行,而是on綁定這種動(dòng)態(tài)元素得綁定在這個(gè)動(dòng)態(tài)元素的父元素或者祖父元素上,再把這個(gè)動(dòng)態(tài)元素作為參數(shù)傳進(jìn)去),on事件不行了,又開始試live這個(gè)綁定事件,ok,在live這里,綁定成功,測試的console語句出來了,看看api,特別有指出,原來live是可以為現(xiàn)在還未創(chuàng)建的動(dòng)態(tài)元素綁定事件的,而bind事件則只能綁定已經(jīng)存在的元素。
好吧,不多說了上Code吧。
  1. <!doctype html>
  2. <html>
  3.         <head>
  4.                 <title>測試怎么綁定動(dòng)態(tài)元素的詳細(xì)情況</title>
  5.                 <body>
  6.                         
  7.                         <div id="container">
  8.                                 <button id="addSpan">添加元素</button>
  9.                                 
  10.                         </div>
  11.                         <p id="disc">提示語句</p>
  12.                         <script type="text/javascript" src="http://code./jquery-1.7.2.min.js"></script>
  13.                         <script type="text/javascript">
  14.                                 
  15.                                 $("#addSpan").click(function(){
  16.                                         $("#container").append($("<button id='clickAddEle'>click事件</button>"));
  17.                                         $("#container").append($("<button id='bindAddEle'>bind</button>"));
  18.                                         $("#container").append($("<button id='liveAddEle'>live</button>"));
  19.                                         $("#container").append($("<button id='onAddEle'>on</button>"));
  20.                                         $("#container").append($("<button id='delegateAddEle'>delegate</button>"));
  21.                                 });
  22.                                 //用click方法綁定
  23.                                 
  24.                                 $("#clickAddEle").click(function(){
  25.                                 var tiscContent = "click為動(dòng)態(tài)元素綁定事件成功1";
  26.                                         $("#disc").html(tiscContent);
  27.                                 });
  28.                                 $("#bindAddEle").bind("bind",function(){
  29.                                 var tiscContent = "bind為動(dòng)態(tài)元素綁定事件成功1";
  30.                                         $("#disc").html(tiscContent);
  31.                                 });
  32.                                 $("#liveAddEle").live("click",function(event){
  33.                                         var tiscContent = "live為動(dòng)態(tài)元素綁定事件成功1";
  34.                                         $("#disc").html(tiscContent);
  35.                                 });
  36.                                 /*
  37.                                 $("#liveAddEle").on("click",function(event){
  38.                                         var tiscContent = "on為動(dòng)態(tài)元素綁定事件成功1";
  39.                                         $("#disc").html(tiscContent);
  40.                                 });
  41.                                 */
  42.                                 $("#container").on("click","#onAddEle",function(event){
  43.                                         var tiscContent = "on為動(dòng)態(tài)元素綁定事件成功1";
  44.                                         $("#disc").html(tiscContent);
  45.                                 });
  46.                                 $("#container").delegate("#delegateAddEle","click",function(event){
  47.                                         var tiscContent = "delegate為動(dòng)態(tài)元素綁定事件成功1";
  48.                                         $("#disc").html(tiscContent);
  49.                                 });
  50.                                 
  51.                                 
  52.                         </script>
  53.                 </body>
  54.         </head>
  55. </html>
復(fù)制代碼
這里的demo你點(diǎn)擊"添加元素"按鈕后,會(huì)動(dòng)態(tài)創(chuàng)建幾個(gè)按鈕,不同的按鈕對應(yīng)不同的方法,如果你點(diǎn)擊了那個(gè)按鈕后,下面的描述文字有更新就說明你的這個(gè)按鈕所代表的綁定事件的方法是游泳的。
注意,on方法是jQuery1.7才添加進(jìn)去的方法,所以如果你的jQuery版本低于這個(gè),那么on方法就會(huì)不起作用。

3.問題總結(jié):
為動(dòng)態(tài)元素綁定事件的話,用click(),bind(),直接為這個(gè)元素綁定on()都不行,要用live()或者delegate()得給這個(gè)元素的上級元素綁定on方法,把這個(gè)元素作為參數(shù)傳進(jìn)去才行。





    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多