0

这是一个 Rails 控制器重定向语句。

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 元素也有一个类。似乎静态元素可以接收焦点,但是,由于 flash 错误消息是由 rails 框架生成的并且是动态生成的元素,因此在尝试应用焦点时它没有呈现在表单上,​​或者它无法在页面的 HTML 中找到该元素。后者似乎不是这种情况,因为调试器返回 HTML$('.alert-danger').focus();

4

1 回答 1

0

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/

于 2017-07-18T23:28:56.237 回答