Javascript没有';t处理jquery添加的元素';s load()、prepend()或append()函数

Javascript没有';t处理jquery添加的元素';s load()、prepend()或append()函数,javascript,ajax,Javascript,Ajax,我有一个评论系统,用户提交评论,对评论进行处理,然后返回评论的HTML。jquery然后将检索到的HTML添加到注释系统中。整个系统都可以工作,但是需要javascript的注释按钮不能工作,除非我刷新页面。如何使我的javascript在通过load、prepend或append添加的元素上工作 我不确定我的问题是否清楚,但以下是我的javascript: $(function () { $(".replyform").submit( function (event) { even

我有一个评论系统,用户提交评论,对评论进行处理,然后返回评论的HTML。jquery然后将检索到的HTML添加到注释系统中。整个系统都可以工作,但是需要javascript的注释按钮不能工作,除非我刷新页面。如何使我的javascript在通过load、prepend或append添加的元素上工作

我不确定我的问题是否清楚,但以下是我的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();
    });
  });
});

然后,我为每个注释提供了“reply”等元素,这些元素在外部javascript中具有函数,除非我刷新页面,否则这些函数将无法工作。希望这是有道理的

使用jQuery(已弃用,请参阅)函数

jQuery有一个
live
方法,允许加载后添加到页面上的元素能够将事件绑定到jQuery上。您可以使用所述的live方法绑定事件

第二种解决方案,可能是更有效的解决方案,将使用
delegate
方法通过现有容器处理事件,并将它们委托给容器中的元素。您可以阅读有关委派的更多信息

使用
live
方法的示例解决方案如下所示,假设您的响应数据中有类为“reply”的按钮:

  $(".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();
  });
$(.reply”).live('click',函数(事件){
event.preventDefault();
id=$(this.attr(“id”).split(“')[1];
text=$('textarea#text"+id).val();
//由于缺少url,post无法工作,但代码保持不变。
//假设你得到这样的回应
// 
//如果你把这个附加到你的文档中
变量数据=$('').html('');
$('#commentreplays'+id).prepend();
$('#reply'+id).hide();
});

这方面几乎没有不同的方法

1) 显式初始化AJAX成功时返回的HTML中的按钮

2) 使用jQuery
live()
函数为按钮类型设置全局处理程序(在1.7中替换为
on()

3) 在标记中正确定义按钮处理程序


你选择哪一个取决于你的具体任务。

我把
$(“.replyform”).submit(函数(事件){
改成
$(“.replyform”).on(“submit”,函数(事件){
只是为了测试(),但它弄乱了我的整个javascript代码。我做错了什么?@JonathanOng弄乱了什么?试着把它改成
$(“#你的回复容器框”)。在(“提交”,“回复表单”,函数(e){…})
上,我正试图用谷歌搜索1的一个例子,但我找不到任何。想分享一些链接吗?搞砸了,我的意思是ajax不再工作了。你的建议似乎也不起作用。=/正如对另一个答案的评论:我更改了
$(.replyform”)。提交(函数(事件){
$(“.replyform”)。在(“提交”上,函数(事件){
只是为了在()上测试,但它弄乱了我的整个javascript代码(ajax不再工作)。我做错了什么?看起来像是变量范围问题。请检查回调中的$(此)对象。我尝试使用on()执行此操作(因为live()显然已被弃用)它似乎打破了我的javascript:
$(function(){$(.report.reportnav”)。单击(function(){id=$(this.attr(“id”).split(“)[1];document.getElementById(“reportid”).setAttribute(“value”,id);$(“#模态报告”)。模态({show:true,keyboard:true,background:true,});});
vs.
$(“.report、.reportnav”).on(“click”,function(){…})
我在下面添加了关于jQuery 1.7引入的方法的
的评论,很抱歉,我没有在这里看到你的评论。你使用的是什么版本的jQuery?我在fiddle上创建了一个示例,你能检查一下这是否是你想要的吗?