Ruby on rails 使用rails表单标签关闭自动完成功能

Ruby on rails 使用rails表单标签关闭自动完成功能,ruby-on-rails,forms,autocomplete,autofill,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' 那也没

我正在尝试在我的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'

当我访问我的表格时,我的电子邮件地址和保存的密码已经填写好了。我做错了什么?我喜欢rails,但有时它真的让我抓狂。

自动完成属性应该分配给html键,如下所示:

html: {autocomplete: 'off'}

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

在表单级别:(所有输入均自动完成)


每个输入:

<%= text_field_tag('my input', nil, autocomplete = 'off') %>
<% f.text_field :fieldname, input_html: {autocomplete: 'off'} %>

每个输入的简单表单:

<%= text_field_tag('my input', nil, autocomplete = 'off') %>
<% f.text_field :fieldname, input_html: {autocomplete: 'off'} %>

从Rails 4开始+

对带有
表单\u标记的整个表单禁用自动完成:

= form_tag admin_sessions_path, html: { autocomplete: "off" } do
使用
form\u禁用整个表单的自动完成:

= form_for @user, html: { autocomplete: "off" } do |f|
禁用单个表单元素的自动完成:

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

希望这有帮助

在最新版本的chrome
autocomplete中,“关闭”不起作用。改为使用自动完成:“禁用”
编辑: 不幸的是,这种方法有缺点

  • 验证错误和
    render:xxx
    • 解决这个问题的方法是将
      别名属性:c\u country,:country
      ,但就个人而言,我不喜欢它的粗糙性
  • 方法不适用于英语语言环境(至少对我来说),但适用于其他语言环境
  • 编辑2: 最终,我用我在中描述的三种方法的组合解决了这个问题

    原始答案:

    <%= text_field_tag('my input', nil, autocomplete = 'off') %>
    
    <% f.text_field :fieldname, input_html: {autocomplete: 'off'} %>
    
    这是HTML的错,主要是Chrome的错,而不是Rails的错

    截至2020年12月Chrome 87为止,上述所有解决方案都不适用于我,web上的许多变体也不适用于
    自动完成
    只读
    onclick
    类型
    等属性的变通方法

    防止自动填充的解决方案

    有效的方法是不使用全名命名字段。i、 e.如果我们有乡村和城市田地,那么就用这个代替

    =f.text\u字段:国家/地区
    =f.text\u字段:城市
    
    这样做

    =f.text\u字段:c\u country
    =f.文本\字段:cit\ y
    
    然后在控制器中手动重新分配参数。i、 e

    def用户参数
    params[:user][:country]=params[:user]。删除(:c_country)
    参数[:用户][:城市]=参数[:用户].删除(:cit_y)
    参数要求(:用户)。许可证(:国家,:城市)
    结束
    
    明白了: 我注意到Chrome在
    type
    中找到其他单词时也会触发自动填充。例如,我观察到这会触发自动填充

    =f.text\u字段:d\u istrict
    
    而这不会触发自动填充

    =f.text\u字段:d\u istric\t
    
    谢谢,但这些选项都不适用于表单标签。第一个和第三个建议与form_for(以及类似simple_form的派生词)一起使用,第二个建议生成以下html:
    。表单标签的文档显示没有名为:options的选项。对不起。。。没有所谓的选项:选项,你绝对正确。只需添加其他属性,就像在我编辑的版本中一样。这样你甚至可以添加“foo='bar'。表单标签也一样。。。请参阅API文档:哈,您的新建议导致rails抛出异常:)
    autocomplete='off'
    是有效的html,但不是ERB或HAML。无论如何,我想我一定做了一些有趣的事情,比如在关闭自动完成之前保存我的密码。如果我删除保存的密码,并从一开始就关闭自动完成功能,也许我会有一些运气。再次感谢。呵呵。。。可以但正如文档中所描述的,它应该通过在一行中添加附加选项并使用简单的“equals”来工作。我没有使用form_标记的项目,所以我不得不猜测。我很感激form_for或formtastic的便利性。祝你好运!时间安排得很好-我发布了这个问题(或类似问题)昨天,直到今天才找到你的答案。效果很好-谢谢!很高兴它很有用。:-@MattSanders使用
    html
    对我不起作用,在阅读文档状态
    后,任何其他键都会为标记创建标准html属性
    ,我只是删除了
    html
    ,只是让
    表单标记了我的路径{autocomplete:“off”}
    ,它对me@Marklar-感谢您的更新。您使用的是什么版本的rails?在较新的版本中,行为可能已更改。5.1注意:在Internet Explorer中:“除off之外的任何字符串都将启用自动完成。”此外从Internet Explorer 11开始,输入类型=密码字段不再支持autocomplete属性。“