Выключить автозаполнение с помощью rails form_tag
Я пытаюсь отключить автозаполнение в одной из моих форм рельсов. Вот что я пробовал до сих пор:
# 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 ответов
Начиная с 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'
Надеюсь это поможет!
В последней версии хрома autocomplete: 'off'
не работает. Вместо этого используйтеautocomplete: 'disabled'
Атрибут autocomplete должен быть назначен ключу html следующим образом:
html: {autocomplete: 'off'}
Есть несколько способов отключить функцию автозаполнения:
На уровне формы: (автозаполнение получено для всех входов)
<% 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'} %>
Изменить: к сожалению, у этого метода есть недостатки
- Поля не заполняются обратно после ошибок проверки и
render :xxx
- решение этой проблемы состоит в том, чтобы сделать
alias_attribute :c_ountry, :country
, но лично мне не нравится его халтурность
- Метод не работает на английской локали (по крайней мере, у меня), но работает на других локалях
Редактировать 2: В конечном итоге я решил это с помощью комбинации трех подходов, которые я описал в более общем вопросе .
Оригинальный ответ:
Это вина HTML и в основном Chrome, а не Rails.
По состоянию на декабрь 2020 года и Chrome 87 все вышеперечисленные решения не работали у меня, равно как и многие варианты из Интернета с
autocomplete
,
readonly
,
onclick
обходные пути атрибутов , , и т.д.
Решение для предотвращения автозаполнения
Что сработало, так это не называть поля их полными именами. т.е. если у нас поля страна и город, то вместо этого
= 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