Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在rails中与ajax、jquery相同的位置提交编辑后的注释_Javascript_Jquery_Ruby On Rails_Ajax_Ruby On Rails 4 - Fatal编程技术网

Javascript 在rails中与ajax、jquery相同的位置提交编辑后的注释

Javascript 在rails中与ajax、jquery相同的位置提交编辑后的注释,javascript,jquery,ruby-on-rails,ajax,ruby-on-rails-4,Javascript,Jquery,Ruby On Rails,Ajax,Ruby On Rails 4,我只是尝试了很多,寻找答案,但什么也没找到。。。。 我在帖子中有评论,用户可以编辑他们的评论。。 如果他单击评论中的编辑,将显示一个表单来代替评论…所有这些都起作用,但当你提交更新时,评论将位于同一帖子中评论列表的下方,编辑表单将保留,如果他再次提交,则另一个表单(双副本)一个会在列表下面…现在如果我刷新页面,更新的评论会回到正确的位置,重复的评论会被删除。。。 如何解决这个问题?我想用更新的commetns替换表单,而不刷新 这是我的帖子页脚,在这里可以播放评论: <div class=

我只是尝试了很多,寻找答案,但什么也没找到。。。。 我在帖子中有评论,用户可以编辑他们的评论。。 如果他单击评论中的编辑,将显示一个表单来代替评论…所有这些都起作用,但当你提交更新时,评论将位于同一帖子中评论列表的下方,编辑表单将保留,如果他再次提交,则另一个表单(双副本)一个会在列表下面…现在如果我刷新页面,更新的评论会回到正确的位置,重复的评论会被删除。。。 如何解决这个问题?我想用更新的commetns替换表单,而不刷新

这是我的帖子页脚,在这里可以播放评论:

<div class="panel-footer" id="panel_footer_<%= post.id %>">
  <div class="comment-form" id="comment-form-j">
    <%= render 'comment2', post: post, comment: post.comments.build %>
  </div>
  <div class="comments" id= "comments_<%= post.id %>">
    <% if post.comments.present? %>
      <%= render post.comments, post: post %>
    <% end %>
  </div>
</div>

您当前正在update.js.erb中添加注释,因此它将显示在其他注释下面。要使其位于上面,请尝试预先添加:

$('#comments_<%= @post.id %>').prepend("<%=j render 'comments/comment', post: @post, comment: @comment, remote: true %>");

您当前正在update.js.erb中添加注释,因此它将显示在其他注释下面。要使其位于上面,请尝试预先添加:

$('#comments_<%= @post.id %>').prepend("<%=j render 'comments/comment', post: @post, comment: @comment, remote: true %>");

在update.js.erb中,将表单替换为注释,如下所示

$('#edit_comment_<%= @comment.id %>').replaceWith(' "<%=j render 'comments/comment', post: @post, comment: @comment, remote: true %>"');
$('edit#u comment')。替换为('“”);

在update.js.erb中,将表单替换为注释,如下所示

$('#edit_comment_<%= @comment.id %>').replaceWith(' "<%=j render 'comments/comment', post: @post, comment: @comment, remote: true %>"');
$('edit#u comment')。替换为('“”);

不,我不想预先结束…我想再次显示注释,而不是带有更新内容的表单。。。因此,您希望隐藏表单,然后在不重定向页面的情况下显示更新的内容。在这种情况下,您可以使用jQuery的
replace()
将表单标记替换为新注释。或者将表单包装在一个div中,然后使用
.html(“”
谢谢你…这个.html帮助了我…我做了这个$(''comments').html(“”);提交后,我再次提交所有评论。。如果有更好的方式呈现所有的评论,那好吗?我在使用hide()时注意到了这一点或者在表单上删除…问题是注释表单生效两个…首先是注释表单生效,然后是编辑注释表单…问题是此表单是一个局部表单,因此用于创建和更新操作…您知道如何解决此问题…例如如何让jquery只针对与更新操作相关的表单?您可以添加阶级依赖于行动。你可以将一个局部变量传递给部分变量(比如
locals:{form_class:'update'}
No我不想预加…我想再次显示注释,而不是带有更新内容的表单…所以想隐藏表单,然后在不重定向页面的情况下显示更新内容。在这种情况下,你可以使用jQuery的
replace()
将表单标记替换为新的注释。或者您将表单包装在一个div中,然后使用
.html(“”
谢谢您…this.html帮助了我…我这样做了$(“#comments"”).html(“”);在提交后再次呈现所有注释。。呈现所有注释有更好的方法吗?这是我在使用hide()时注意到的一点或者在表单上删除…问题是注释表单生效两个…首先是注释表单生效,然后是编辑注释表单…问题是此表单是一个局部表单,因此用于创建和更新操作…您知道如何解决此问题…就像如何让jquery只针对与更新操作相关的表单一样?您可以添加一个class依赖于操作。您可以将局部传递给分部(如
locals:{form_class:'update'}
def edit
  @comment = @post.comments.find(params[:id])
  respond_to do |format|
    format.js 
  end
end

def update
  @comment = @post.comments.find(params[:id])   

  if @comment.user_id == current_user.id
     if @comment.update(comments_params)
       respond_to do |format|
         format.html {redirect_to root_path}
         format.js 
        end
     else
       flash[:alert] = "Something worng, try again"
       render root_path
     end
  end
end
$('#comments_<%= @post.id %>').prepend("<%=j render 'comments/comment', post: @post, comment: @comment, remote: true %>");
$('#my-comment-form-id').hide(); // or .remove();
$('#edit_comment_<%= @comment.id %>').replaceWith(' "<%=j render 'comments/comment', post: @post, comment: @comment, remote: true %>"');