在设置 i18 多语言时,希望通过 ajax 的方式重置 I18n.locale 来实现切换显示语言,form 已经设置为 remote: true,是通过 select 选择变化时自动提交。
但提交格式总是:html,一直没解决,索性添加了隐藏的 submit_tag,select 变化时触发 submit_tag 点击,这才实现了提交格式为:js
旧代码
<%= form_tag(i18_path(), :remote => true, style: "margin:0px;") do %>
<span style="color:darkgray;"><small><%= t("layout.lang") %></small></span>
<%= select_tag("locale",options_for_select([[t("lang.english"),"en"],[t("lang.chinese"),"zh-CN"]], I18n.locale),
{ class: "chosen-select", onchange: "this.form.submit()" }) %>
<% end %>
新代码
<%= form_tag(i18_path(), :remote => true, style: "margin:0px;") do %>
<span style="color:darkgray;"><small><%= t("layout.lang") %></small></span>
<%= select_tag("locale",options_for_select([[t("lang.english"),"en"],[t("lang.chinese"),"zh-CN"]], I18n.locale),
{ class: "chosen-select", onchange: "$('#i18_btn').trigger('click');" }) %>
<%= submit_tag "", id: "i18_btn", style: "display:none;" %>
<% end %>
那位了解其中道理的朋友帮忙解释一下,顺便说一下如何通过原来的方式实现:js 提交?
毕竟触发 submit_tag 的方式太罗嗦了。