Выключить автозаполнение с помощью 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'} %>

Изменить: к сожалению, у этого метода есть недостатки

  1. Поля не заполняются обратно после ошибок проверки и render :xxx
  • решение этой проблемы состоит в том, чтобы сделать alias_attribute :c_ountry, :country, но лично мне не нравится его халтурность
  1. Метод не работает на английской локали (по крайней мере, у меня), но работает на других локалях

Редактировать 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
Другие вопросы по тегам