使用rails form_tag关闭自动完成功能

时间:2014-07-16 13:09:49

标签: ruby-on-rails forms autocomplete autofill

我正试图在我的一个rails表单中关闭自动完成功能。这是我到目前为止所尝试的内容:

# add it at the form level
= form_tag admin_sessions_path, autocomplete: "off" do

那不起作用。

# add it at the element level
.panel
  = label_tag :email
  = email_field_tag :email, params[:email], autocomplete: 'off'

也没有。

# add it to both
= form_tag admin_sessions_path, autocomplete: "off" do

  # add it at the element level
  .panel
    = label_tag :email
    = email_field_tag :email, params[:email], autocomplete: 'off'

当我访问我的表单时,我的电子邮件地址和已保存的密码已经填写完毕。我在这做错了什么?我喜欢铁轨,但它有时让我很生气。

5 个答案:

答案 0 :(得分:13)

从Rails 4 +开始

使用form_tag

为整个表单停用自动填充功能
= form_tag admin_sessions_path, html: { autocomplete: "off" } do

使用form_for

为整个表单停用自动填充功能
= form_for @user, html: { autocomplete: "off" } do |f|

禁用单个表单元素的自动填充功能:

= f.text_field :foo, autocomplete: 'off'

希望这有帮助!

答案 1 :(得分:3)

应将autocomplete属性分配给html键,如下所示:

html: {autocomplete: 'off'}

答案 2 :(得分:3)

最新版本的Chrome autocomplete: 'off'无法正常工作。而是使用autocomplete: 'disabled'

答案 3 :(得分:1)

有几种关闭自动完成功能的方法:

在表单级别(所有输入的autoceomplete已关闭)

<% form_tag(:form_name, @form_name, autocomplete = "off") do |f|%>

每次输入:

<%= text_field_tag('my input', nil, autocomplete = 'off') %>

每个输入的简单表单:

<% f.text_field :fieldname, input_html: {autocomplete: 'off'} %>

答案 4 :(得分:0)

编辑: 不幸的是,这种方法有缺点

  1. 验证错误后不填回字段,render :xxx
  • 这个问题的解决方案是制作alias_attribute :c_ountry, :country,但我个人不喜欢它的笨拙
  1. 方法不适用于英语语言环境(至少对我而言),但适用于其他语言环境

编辑 2: 最终我结合了我在 more general question

中描述的三种方法解决了这个问题

原答案:

这是 HTML 的错,主要是 Chrome,而不是 Rails。

截至 2020 年 12 月Chrome 87 以上所有解决方案都不适用于我,autocomplete 来自网络的许多变体也不适用于我, readonlyonclicktype 等属性的解决方法。

防止自动填充

的解决方案

有效的是不要用他们的全名命名字段。即如果我们有国家和城市字段,那么代替这个

= f.text_field :country
= f.text_field :city

这样做

= f.text_field :c_ountry
= f.text_field :cit_y

然后手动重新分配控制器中的参数。即

def user_params
  params[:user][:country] = params[:user].delete(:c_ountry)
  params[:user][:city] = params[:user].delete(:cit_y)

  params.require(:user).permit(:country, :city)
end

陷阱: 我注意到 Chrome 在 type 中找到其他单词时也会触发自动填充。例如,我观察到这会触发自动填充

= f.text_field :d_istrict

虽然这不会触发自动填充

= f.text_field :d_istric_t
相关问题