[英]Rails: JS Controller Being Called Twice for Some Reason
由於某種原因,當我單擊一個按鈕時,我的 controller 和生成的 jquery function 被調用了兩次。 由於調用的 js function 是切換的,因此這是一個問題,因為它會導致代碼跳入和跳出視圖。
這是表格:
Unseen Notifications: <%= current_user.notification_unseen %> </div>
<%= button_to "show", {:action => "seen", :controller=>"notifications"}, :remote => true %>
這是 controller:
def seen
respond_to do |format|
format.js
end
end
這是 jquery:
$("div#notifications").toggle();
$("div#count").html("<%= escape_javascript( render :partial => 'notifications/count')%>");
我不知道為什么這可能會發生。 我一直非常小心不要雙擊,也不知道如何防止它。 任何建議將不勝感激。
我最近遇到過這樣的問題,當時我有 2 個 jquery 庫。 特別是,檢查您是否只有 jquery_ujs.js 而不是 jquery.js。 似乎當你同時包含它們時,某些 js 函數會被調用兩次。
希望這可以幫助!
如果本傑明的建議不起作用,您可以使用作弊和黑客攻擊 go 並在每次單擊時為某個全局變量加 1(這會發生兩次),然后使用模數僅在 (global_counter % 2 == 0) 時觸發您的操作。
需要明確的是,這是一個糟糕的解決方案,您應該盡可能避免使用......
我是 Rails 新手,遇到了同樣的問題。 原來我有:
<%= javascript_include_tag "application" %>
在我看來和在 application.html.erb 中。 我刪除了其中一個,瞧,修復了。
如果您在 rails 5.1 及更高版本中運行 jquery,因為 rails 放棄了 jquery 支持並切換到自己的 ujs,您需要從 application.js 文件中刪除 //= require rails-ujs。
我在運行最新版本的 rails 時遇到了同樣的問題,這解決了我的問題。
類似於Michael Mayer和Benjamin Tan Wei Ha的回答:
在實現 Webpacker 時,第二個<%= javascript_pack_tag 'application' %>
可能會被添加到布局中(甚至是自動添加)。 這發生在最近,當現代化一個還沒有為 Rails 7 做好准備的舊應用程序時。
TL;博士;
當心第二個application.js
參考。
服用 jquery_ujs.js 對我有用。
仔細查看文件application.html.erb ,看看它是否指的是 jquery.js 和 jquery_ujs.js。 如果是這樣,只需將 jquery_ujs.js 取出,刷新瀏覽器並重試。
另外,看一下頁面源碼,看看是否同時引用了jquery_ujs和jquery。 如果是這樣,請在源文件中搜索對該 jquery_ujs 的引用。
為我工作,謝謝大家。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.