jquery datables ajax分頁后的點擊事件無效是怎么回事


異步請求數據后,動態向table中追加行,行點擊事件失效

動態加入到DOM中的對象無法繼承原有的事件,所以無效,舉例:

// $.ajax... ajax部分省略
var  tr =  "" ;
if (data.length){
     for ( var  i=0; i<data.length; i++){
         tr =  '<tr>' ;
         tr +=  '<td>'  + data.status == 0 ?  "正常"  "報警"  '<td>' ;
         tr +=  '</tr>' ;
         $( "#table1" ).find( "tbody" ).append(tr);
     }  
}
 
// tr的點擊事件
$( "#table1 tbody" ).find( "tr" ).click( function (){
     // do something
});

上面的例子中,table1中原有的tr標簽有點擊事件,而通過ajax獲取數據動態創建添加到DOM中的tr標簽並沒有繼承點擊事件,點擊無任何反應。解決辦法有兩種:

  1. 純js方法:將tr的點擊事件寫成函數,然后為動態創建的tr標簽添加該函數的onclick事件

  • for ( var  i=0; i<data.length; i++){
             tr =  '<tr onclick="OnTrClick()">' // 創建時為tr指定<a href="https://www.baidu.com/s?wd=click%E4%BA%8B%E4%BB%B6&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y4mHNBmWR3nH99nHRsujcs0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnHRknHm1njckn1RdnWmLnHnsn0" target="_blank" class="baidu-highlight">click事件</a>
             tr +=  '<td>'  + data.status == 0 ?  "正常"  "報警"  '<td>' ;
             tr +=  '</tr>' ;
             $( "#table1" ).find( "tbody" ).append(tr);
    }
  • jquery方法:jquery中可使用live()、on()兩個方法來完成類似效果,其原理是利用事件委派機制,需要注意的是jquery 1.9版本已不再支持live()方法。

  1. // tr的點擊事件 (jquery 1.9以下)
    $( "#table1 tbody" ).find( "tr" ).live( "click" function (){
         // do something
    });
// tr的點擊事件【推薦】 (jquery 1.7以上)
$( "#table1 tbody" ).find( "tr" ).on( "click" function (){
     // do something
});

詳細介紹請查看全文https://cnblogs.com/qianzf/

原文博客的鏈接地址:https://cnblogs.com/qzf/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM