Javascript 使用Ajax在不刷新的情况下切换按钮

Javascript 使用Ajax在不刷新的情况下切换按钮,javascript,jquery,ruby-on-rails,ajax,Javascript,Jquery,Ruby On Rails,Ajax,问题是,页面上所有的“进入”按钮都有相同的id,所有的“撤消”按钮都有相同的id,因此单击一个按钮会抵消其他按钮。此外,按钮仅切换一次。我对rails、CSS、ajax非常陌生,非常感谢您的帮助,谢谢。 Micropost_Helper.rb def toggle_like_button(micropost, user) if user.voted_for?(micropost) link_to "undo", like_micropost_path(micropost), :cl

问题是,页面上所有的“进入”按钮都有相同的id,所有的“撤消”按钮都有相同的id,因此单击一个按钮会抵消其他按钮。此外,按钮仅切换一次。我对rails、CSS、ajax非常陌生,非常感谢您的帮助,谢谢。

Micropost_Helper.rb

def toggle_like_button(micropost, user)
  if user.voted_for?(micropost)
    link_to "undo", like_micropost_path(micropost), :class => "btn btn-mini btn-primary", :id =>"unvote_form", :remote => true
  else
    link_to "Into it!", like_micropost_path(micropost), :class => "btn btn-mini btn-primary", :id =>"vote_form", :remote => true
  end
end
微柱控制器

def like
  @micropost = Micropost.find(params[:id])
  if @micropost.user_id != @current_user
    if @current_user.voted_for?(@micropost)
      @current_user.unvote_for(@micropost)
      respond_to do |format|
        format.html { redirect_to :back }
        format.js
      end
    else
      @current_user.vote_for(@micropost)
      respond_to do |format|
        format.html { redirect_to :back }
        format.js
      end
    end
  end
end

VIEW/microposts/like.js.erb您应该向每个按钮添加uniq id,如下所示:

def toggle_like_button(micropost, user)
  if user.voted_for?(micropost)
    link_to "undo", like_micropost_path(micropost), :class => "btn btn-mini btn-primary", :id =>"unvote_form_#{micropost.id}", :remote => true
  else
    link_to "Into it!", like_micropost_path(micropost), :class => "btn btn-mini btn-primary", :id =>"vote_form_#{micropost.id}", :remote => true
  end
end
然后您可以在like.js.erb中引用一个按钮:

$("#vote_form_<%=@micropost.id%>").html("undo")
$("#unvote_form_<%= @micropost.id%>").html("Into it!")
$(“投票形式”)html(“撤销”)
$(“#unnote_form”).html(“插入它!”)

这样,您将拥有有效的html,您的问题应该得到解决。

您应该将uniq id附加到每个按钮,如下所示:

def toggle_like_button(micropost, user)
  if user.voted_for?(micropost)
    link_to "undo", like_micropost_path(micropost), :class => "btn btn-mini btn-primary", :id =>"unvote_form_#{micropost.id}", :remote => true
  else
    link_to "Into it!", like_micropost_path(micropost), :class => "btn btn-mini btn-primary", :id =>"vote_form_#{micropost.id}", :remote => true
  end
end
然后您可以在like.js.erb中引用一个按钮:

$("#vote_form_<%=@micropost.id%>").html("undo")
$("#unvote_form_<%= @micropost.id%>").html("Into it!")
$(“投票形式”)html(“撤销”)
$(“#unnote_form”).html(“插入它!”)

这样,您将拥有有效的html,您的问题应该得到解决。

所以您使用的是无效的html不确定您的意思,没有简单的方法来解决此问题吗?一个id在一个页面中应该是唯一的。你的主要问题是,你使用的是无范围js,每次都会触及整个dom。html页面上的每个元素都必须有一个唯一的ID。我建议在你的buttonThanks前面加上帖子的ID,你的问题就变成了我的答案:)所以你使用的是无效的HTMLN不知道你的意思,没有简单的方法来解决这个问题吗?一个id在一个页面中应该是唯一的。你的主要问题是你使用无范围的js,你每次都会点击整个dom。html页面上的每个元素都必须有一个唯一的ID。我建议在你的buttonThanks前面加上帖子的ID,你的问题就变成了我的答案:)我不认为它能找到这些#投票#{@microspost.ID}。按钮确实有一个唯一的id,现在我检查了html-->id=“unvote_form_361”一个按钮确认的例子{@microspost.id}无法在like.js.erb文件中返回一个数字。正确的语法是必须嵌入ruby:$(“#vote_form_uuuu”).html(“undo”)$(“#unvote_uform_uuuuuuu”).html(“Into!”)我认为它找不到这些#vote_uuform_#{@micropost.id}。该按钮确实获得了唯一的id,现在我检查了html-->id=“unvote_form_361”一个按钮的示例已确认{@micropost.id}无法在like.js.erb文件中返回一个数字。正确的语法是必须嵌入ruby:$(“#vote_form_uu”).html(“undo”)$(“#unvote_form_u_u”).html(“嵌入到其中”)