Rails: JS Controller вызывается дважды по какой-то причине - PullRequest
6 голосов
/ 12 июля 2011

По какой-то причине, когда я нажимаю на кнопку, мой контроллер и получающаяся функция 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')%>");

Я в недоумении, почему это могло произойти. Я был очень осторожен, чтобы не щелкнуть дважды и не знаю, как это предотвратить Любые предложения будут очень оценены.

Ответы [ 5 ]

15 голосов
/ 12 июля 2011

У меня недавно была такая проблема, когда у меня было 2 библиотеки jquery.В частности, убедитесь, что у вас есть только jquery_ujs.js, а не jquery.js.Похоже, когда вы включаете их обе, определенные функции js вызываются дважды.

Надеюсь, это поможет!

5 голосов
/ 12 июля 2011

Если предложение Бенджамина не работает, вы можете использовать читы и хаки и добавлять 1 к некоторой глобальной переменной при каждом клике (что могло бы произойти дважды), а затем использовать модуль, чтобы запускать ваше действие только тогда, когда (global_counter% 2 ==) 0).

Просто чтобы прояснить, это ужасное решение, которое вам следует избегать, если это вообще возможно ...

2 голосов
/ 30 мая 2013

Я новичок в рельсах, и у меня была такая же проблема.Оказывается, у меня было:

<%= javascript_include_tag "application" %>

Как в моем представлении, так и в application.html.erb.Я удалил один из них и вуаля, исправлено.

0 голосов
/ 15 января 2019

Если вы используете jquery в rails 5.1 и более поздних версиях, так как rails отказались от поддержки jquery и переключились на свои собственные ujs, вам необходимо удалить // = require rails-ujs из файла application.js.

У меня была та же проблема при запуске последней версии рельсов, это решило мои проблемы.

0 голосов
/ 25 января 2012

Взятие jquery_ujs.js работало на меня

Внимательно посмотрите на файл application.html.erb , чтобы узнать, ссылается ли он на jquery.js и jquery_ujs.js. Если это так, просто извлеките jquery_ujs.js, обновите браузер и попробуйте снова.

Кроме того, взгляните на исходный код страницы и посмотрите, упоминаются ли одновременно jquery_ujs и jquery. Если это так, найдите в исходных файлах ссылки на этот jquery_ujs.

Работал на меня, спасибо, ребята.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...