Акцентирование внимания на рельсах
Вот оператор перенаправления контроллера рельсов.
redirect_to "controller_action_path", error: err.to_s
Оператор генерирует следующий HTML-код в исходной странице браузера.
<div class="alert alert-danger alert-error" role="alert">"Your alert here"</div>
Проблема: Как создать фокус вокруг ответного сообщения, которое появляется вверху страницы. Попытки Решений (ы):
<% if flash[:error] %>
<%= javascript_tag do %>
$('.alert-danger').focus();
<% end %>
<% end %>
Это работает, если элемент HTML имеет тег id. Возможно, если у элемента HTML тоже есть класс. Кажется, что статические элементы могут получить фокус, но, поскольку сообщение об ошибке флэш-памяти генерируется платформой rails и является динамически генерируемым элементом, либо оно не отображалось в форме во время попытки фокусировки, либо он не может найти элемент в HTML-коде страницы. Последнее не похоже на ситуацию, так как отладчик возвращает HTML для $('.alert-danger').focus();
1 ответ
Rails генерирует статический html и отправляет его клиенту, поэтому все, что генерирует Rails, отображается одновременно со всем другим HTML.
Попробуйте изменить код контроллера на redirect_to "controller_action_path", alert: err.to_s
и измените ваше условие, оборачивая функцию jQuery на <%= if flash[:alert] %>
, :error
не является допустимым вариантом для redirect_to
http://api.rubyonrails.org/classes/ActionController/Redirecting.html
Я также не думаю, что условие на jQuery необходимо. Если ошибки нет, то в любом случае не должно быть видимых тегов с этим классом ошибок.
Также $.focus()
не работает на каждом элементе по умолчанию https://api.jquery.com/focus/