Javascript 使用Ajax在不刷新的情况下切换按钮
问题是,页面上所有的“进入”按钮都有相同的id,所有的“撤消”按钮都有相同的id,因此单击一个按钮会抵消其他按钮。此外,按钮仅切换一次。我对rails、CSS、ajax非常陌生,非常感谢您的帮助,谢谢。 Micropost_Helper.rbJavascript 使用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
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(“嵌入到其中”)