将重点放在rails flash消息上

时间:2017-07-18 21:57:56

标签: ruby-on-rails rails-flash

这是一个rails controller重定向语句。

redirect_to "controller_action_path", error: err.to_s 

该语句在浏览器的页面源中生成以下HTML。

<div class="alert alert-danger alert-error" role="alert">"Your alert here"</div>

问题:如何围绕页面顶部显示的Flash响应消息创建焦点。 尝试过的解决方案:

<% if flash[:error] %>
  <%= javascript_tag do %>
    $('.alert-danger').focus();
  <% end %>
<% end %>

如果HTML元素具有id标记,则此方法有效。也许如果HTML元素也有类。看起来好像静态元素可以获得焦点,但是,由于flash框架生成了一个动态生成的元素,因此它是一个动态生成的元素,或者在尝试应用焦点时没有在表单上呈现,或者它无法在页面的HTML中找到该元素。由于调试器返回$('.alert-danger').focus();

的HTML,因此后者似乎不是这种情况

1 个答案:

答案 0 :(得分:0)

Rails生成静态html并将其发送到客户端,因此Rails生成的任何内容都会与所有其他HTML同时呈现。

尝试将控制器代码更改为redirect_to "controller_action_path", alert: err.to_s,并将包装jQuery函数的条件更改为<%= if flash[:alert] %>。对于:error http://api.rubyonrails.org/classes/ActionController/Redirecting.html

redirect_to不是有效选项

我也不认为jQuery的条件是必要的。如果没有错误,那么无论如何都不应该有错误类的可见标记。

默认情况下,$.focus()对每个元素都不起作用https://api.jquery.com/focus/