Ruby on rails 使用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' 那也没
# 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'
希望这有帮助 在最新版本的chromeautocomplete中,“关闭”不起作用。改为使用自动完成:“禁用”
编辑:
不幸的是,这种方法有缺点
验证错误和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属性。“