我正试图在我的一个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'
当我访问我的表单时,我的电子邮件地址和已保存的密码已经填写完毕。我在这做错了什么?我喜欢铁轨,但它有时让我很生气。
答案 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)
编辑: 不幸的是,这种方法有缺点
render :xxx
alias_attribute :c_ountry, :country
,但我个人不喜欢它的笨拙编辑 2: 最终我结合了我在 more general question
中描述的三种方法解决了这个问题原答案:
这是 HTML 的错,主要是 Chrome,而不是 Rails。
截至 2020 年 12 月 和 Chrome 87 以上所有解决方案都不适用于我,autocomplete
来自网络的许多变体也不适用于我, readonly
、onclick
、type
等属性的解决方法。
防止自动填充
的解决方案有效的是不要用他们的全名命名字段。即如果我们有国家和城市字段,那么代替这个
= 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