出于某种原因,当我点击一个按钮时,我的控制器和生成的jquery函数被调用两次。由于调用的js函数是切换,这是一个问题,因为它会导致代码跳入和跳出视图。
以下是表格:
Unseen Notifications: <%= current_user.notification_unseen %> </div>
<%= button_to "show", {:action => "seen", :controller=>"notifications"}, :remote => true %>
这是控制器:
def seen
respond_to do |format|
format.js
end
end
这是jquery:
$("div#notifications").toggle();
$("div#count").html("<%= escape_javascript( render :partial => 'notifications/count')%>");
我为什么在地球上可能会发生这种情况感到茫然。我一直非常小心,不要双击,不知道如何防止它。任何建议都会有很大的意义。
答案 0 :(得分:15)
我之前遇到过这样的问题,当时我有2个jquery库。特别是,检查您是否只有jquery_ujs.js而不是jquery.js。好像当你同时包含它们时,某些js函数会被调用两次。
希望这有帮助!
答案 1 :(得分:5)
如果本杰明的建议不起作用,你可以使用作弊和黑客,并在每次点击时添加1到一些全局变量(这将发生两次),然后使用模数仅触发你的动作(global_counter%2 == 0)。
为了清楚起见,这是一个可怕的解决方案,你应该尽可能避免使用......
答案 2 :(得分:2)
我是rails的新手并遇到了同样的问题。事实证明我有:
<%= javascript_include_tag "application" %>
在我的视图和application.html.erb中。我删除了其中一个,瞧,固定。
答案 3 :(得分:0)
以jquery_ujs.js为我工作。
仔细查看文件 application.html.erb ,看看是否指的是jquery.js和jquery_ujs.js。如果是这样,只需取出jquery_ujs.js,刷新浏览器并再次尝试。
另外,请查看页面源代码,看看是否同时引用了jquery_ujs和jquery。如果是这样,请在源文件中搜索对该jquery_ujs的引用。
为我工作,谢谢你们。
答案 4 :(得分:0)
如果您在Rails 5.1及更高版本中运行jquery,则由于Rails放弃了对jquery的支持并切换到其自己的ujs,您需要从application.js文件中删除// = require rails-ujs。
在运行最新版本的rails时我遇到了同样的问题,这解决了我的问题。