非同步操作動態新增節點,導致在程式碼中給予新增的節點全域綁定事件或取得元素無效,問題出在哪裡呢?本文主要跟大家介紹JQuery Ajax 非同步操作之動態加入節點實例詳解,有興趣的朋友參考下吧,希望能幫助大家。
$(function () { var IP = '...'; // 页面中的默认编号起始值 和 公用IP前缀 showData(); function showData() { if ($('.content')) $('.content').remove(); $.ajax({ url:IP + '/get', type:'get', success:function (data) { var newInfo = ''; if(!data) return alert('对不起,没有数据可供操作!'); newInfo +='<p class="btnBox">' + '<a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="remove">删除</a>' + '<a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="change">修改</a>' + '</p>'; });$('body').append(newInfo); }, error:function (err) { alert(err); } }); } } //这是一段很明显的通过JQuery-ajax前后台交互并动态添加的代码; //但是,如果你在该方法(showData())外面来给上述动态添加的a标签添加事件或者获取值的时候可能会出现无效的情况: $('.remove').click(function(){ alert('这是删除按钮!'); }); //页面中则不会弹出(这是删除按钮!)的弹框;
那麼,問題出在哪裡呢?
事實上,ajax從後台獲取資料再顯示到我們的頁面中的過程是異步的,也就是說當我們利用ajax從後台獲取值得時候,在ajax之後的程式碼是一直往下執行著走的,而不會等著你ajax獲取並創建節點完成後再往下繼續執行,這便是異步請求的機制,對於這個問題我們怎麼解決呢:
$(function () { var IP = '...'; // 页面中的默认编号起始值 和 公用IP前缀 showData(); function showData() { if ($('.content')) $('.content').remove(); $.ajax({ url:IP + '/get', type:'get', success:function (data) { var newInfo = ''; if(!data) return alert('对不起,没有数据可供操作!'); newInfo +='<p class="btnBox">' + '<a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="remove">删除</a>' + '<a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="change">修改</a>' + '</p>'; });$('body').append(newInfo); // 当动态添加节点完成之后再给其中的按钮绑定事件 $('.remove').click(function(){ alert('这是删除按钮!'); }); }, error:function (err) { alert(err); } }); } }
將綁定事件的程式碼改到ajax內部,這樣讓動態新增完成之後再給其中的按鈕綁定事件,就可以達到我們所需要的效果了,這便是ajax的非同步機制
相關推薦:
PHP中開發XML應用程式基礎篇新增節點 刪除節點查詢節點查詢節_PHP教學
以上是JQuery Ajax 非同步操作之動態新增節點實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!