![](/img/trans.png)
[英]when load a page into a div with jquery, javascript functions doesn't work
[英]Javascript doesn't work on elements added by jquery's load(), prepend(), or append() functions
我有一個評論系統,用戶提交評論,處理評論,然后返回評論的HTML。 然后jquery將檢索到的HTML添加到評論系統。 整個系統工作,但除非我刷新頁面,否則需要javascript的注釋按鈕不起作用。 如何讓我的javascript在通過加載,前置或附加添加的元素上工作?
不確定我的問題是否清楚,但這是我的javascript:
$(function () {
$(".replyform").submit( function (event) {
event.preventDefault();
id = $(this).attr("id").split('_')[1];
text = $('textarea#text_'+id).val();
$.post( "/api/add/comment/", {_csrf: _csrf, id: id, text: text, a: a},
function (data) {
$('#commentreplies_'+id).prepend(data);
$('#replyform_' + id).hide();
});
});
});
然后我有每個注釋的“回復”元素,這些注釋在外部javascript中具有不起作用的功能,除非我刷新頁面。 希望這是有道理的。
jQuery有一個live
方法,允許在加載后添加到頁面上的元素能夠使事件已經被jQuery綁定。 您可以使用此處所述的實時方法綁定事件。
第二種解決方案,可能是更有效的解決方案,將使用delegate
方法來處理現有容器的事件並將它們委托給該容器內的元素。 您可以在此處閱讀有關委托的更多信息。
使用live
方法的示例解決方案如下,假設您的響應數據中包含“回復”類的按鈕:
$(".reply").live('click', function(event) {
event.preventDefault();
id = $(this).attr("id").split('_')[1];
text = $('textarea#text_'+id).val();
// post won't work since url is missing, but that code remains the same.
// Assuming you get a response like this
// <div><input type="textarea" id="text2" /><input type="submit" id="reply_2" value="submitReply" class="reply" /></div>
// And if you append this to your document
var data = $('<div></div>').html('<input type="textarea" id="text2" /><input type="submit" id="reply_2" value="submitReply" class="reply" />');
$('#commentreplies_'+id).prepend();
$('#reply_' + id).hide();
});
對此有幾種不同的方法
1)在AJAX成功時顯式初始化返回HTML內部的按鈕
2)使用jQuery live()
函數為你的按鈕類型設置全局處理程序on()
在1.7中替換為on()
)
3)在標記中定義按鈕處理程序
您選擇哪一個取決於您的具體任務。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.