在AJAX调用Rails应用程序后使用js.erb呈现页面后,jQuery动作没有响应的HTML类
我正在编写一个具有以下功能的应用程序,并且这是通过对控制器的AJAX调用完成的。在那次调用之后,我渲染了使用js.erb单击的按钮的相反按钮,该按钮呈现我想要显示的按钮。但是,我在按钮上有一个悬停功能,单击此按钮后,悬停不再起作用。这是正确的按钮类,但我用来改变按钮状态的jQuery不起作用。在AJAX调用Rails应用程序后使用js.erb呈现页面后,jQuery动作没有响应的HTML类
下面是一些代码,我的jQuery:
unfollow_button = $(".unfollow-button"); unfollow_button.hover(
function(){
$(this).addClass("btn-danger");
$(this).text("Unfollow");
},
function() {
$(this).removeClass("btn-danger");
$(this).text("Following");
}
);
这是我的看法:
<% if current_user.following?(f) %> <%= link_to "Following", user_unfollow_teacher_path(f), :class => "btn unfollow-button", :remote => true %>
<% else %>
<%= link_to "Follow", user_follow_teacher_path(f), :class => "btn btn-primary purple-button", :remote => true %>
<% end %>
这是js.erb文件我用:
$("#follow_form").html("<%= escape_javascript(render('users/follow')) %>")
而且这部分得到呈现是:
<%= link_to "Following", user_unfollow_teacher_path(@user), :class => "unfollow-button btn", :remote => true %>
当我点击取消关注时,jQuery工作正常,然后再次关注并将按钮设置为取消关注按钮,悬停操作停止工作。
任何帮助,将不胜感激谢谢。
回答:
你将不得不在你的js.erb
文件再次调用jQuery代码:
$("#follow_form").html("<%= escape_javascript(render('users/follow')) %>") $(".unfollow-button").hover(
function(){
$(this).addClass("btn-danger");
$(this).text("Unfollow");
},
function() {
$(this).removeClass("btn-danger");
$(this).text("Following");
}
);
它最好不要在多个地方的代码,所以我通常设置一个初始化程序,并允许我调用我的.erb文件中的相同代码(以下代码位于coffeescript中,但您可以将其转换为js here
init.js.coffee
(myApp, $, undefined_) -> myApp.init = myApp.init or {}
myApp.init.followHover = ->
$(".unfollow-button").hover(#code here)
) window.myApp = window.myApp or {}, jQuery
$ ->
myApp.init.followHover()
然后,当你在js.erb中再次需要它时,只需调用它!
$("#follow_form").html("<%= escape_javascript(render('users/follow')) %>") myApp.init.followHover()
回答:
我认为问题在于jQuery事件侦听器不知道新插入的DOM元素。尝试使用unfollow_button.on('hover', function()...
更多信息:http://api.jquery.com/on/
回答:
委托你的JavaScript这样的事件。现在JQUERY不会在AJAX调用之后中断,而且这种工作方式在涡轮链接打开的情况下效果很好。
$(function() { $("#follow_form").parent().delegate(".unfollow-button", "mouseover",
function(){
$(this).val("Unfollow");
$(this).addClass("btn-danger");
}
);
$("#follow_form").parent().delegate(".unfollow-button", "mouseout",
function(){
$(this).val("Following");
$(this).removeClass("btn-danger");
}
);
});
以上是 在AJAX调用Rails应用程序后使用js.erb呈现页面后,jQuery动作没有响应的HTML类 的全部内容, 来源链接: utcz.com/qa/259757.html