Помимо других текстовых и наглядных пособий по отправке формы и пост-валидации, я окрашиваю поля ввода в красный цвет, чтобы обозначить интерактивную область, требующую внимания.
В Chrome (и для пользователей панели инструментов Google) функция автозаполнения меняет цвет моих форм ввода на желтый. Вот сложная проблема: я хочу, чтобы в моих формах было разрешено автозаполнение, поскольку это ускоряет вход пользователей в систему. Я собираюсь проверить возможность отключения атрибута автозаполнения, если / когда возникает ошибка, но это сложный бит кода, чтобы программно отключить автозаполнение для единственного затронутого ввода на странице. Проще говоря, это было бы большой головной болью.
Итак, чтобы попытаться избежать этой проблемы, есть ли более простой способ остановить Chrome от перекраски полей ввода?
[править] Я попробовал! important, предложенное ниже, но оно не дало результата. Я еще не проверял панель инструментов Google, чтобы узнать, подойдет ли для этого атрибут! Important.
Насколько я могу судить, нет никаких других средств, кроме использования атрибута автозаполнения (который, похоже, работает).
Я дал вам ответ, который работает ниже.
Я не понимаю, почему все говорят о схеме: нет, вопрос в желтом фоне, а НЕ в схеме. А атрибут autocomplete, установленный на off, НЕ решит проблему, поскольку davebug сказал, что он хочет, чтобы автозаполнение работало, а не желтый фон.






Если я правильно помню, важное правило в таблице стилей для цвета фона входных данных переопределит автозаполнение панели инструментов Google - предположительно, то же самое будет справедливо и для Chrome.
Да, это будет серьезная головная боль, которая, на мой взгляд, не стоит возврата. Возможно, вы могли бы немного изменить свою стратегию пользовательского интерфейса и вместо того, чтобы раскрасить поле красным, вы могли бы покрасить границы в красный цвет или наклеить небольшую красную ленту рядом с ним (например, лента gmails «Загрузка»), которая исчезает, когда коробка находится в фокус.
Я знаю, что в Firefox вы можете использовать атрибут autocomplete = "off", чтобы отключить функцию автозаполнения. Если это работает в Chrome (не проверял), вы можете установить этот атрибут при обнаружении ошибки.
Это можно использовать как для одного элемента
<input type = "text" name = "name" autocomplete = "off">
... а также для всей формы
<form autocomplete = "off" ...>
«Я собираюсь проверить возможность выключить атрибут автозаполнения, если / когда возникла ошибка, но программно отключить автозаполнение для единственного введенного ввода на странице - сложная задача в кодировании».
Хех ... да, спасибо, хотя я полагаю, мне все еще нужно проверить в Chrome, верно?
для людей, пользующихся рельсами, простая форма <%= simple_form_for @user, html: { autocomplete: 'off' } do |f| %>
извините, что мне это не помогло
Установите для свойства схемы CSS значение none.
input[type = "text"], input[type = "password"], textarea, select {
outline: none;
}
В случаях, когда браузер также может добавить цвет фона, это можно исправить чем-то вроде
:focus { background-color: #fff; }
Фон? Я не знал, что Chrome также добавил цвет фона? Если да, то это можно исправить с помощью :focus { background-color: #fff; }.
@pestaa правильно, это неправильный ответ, но он, безусловно, решает аналогичную проблему
Будьте осторожны при работе с планшетами и прочим, в браузере Android по умолчанию немного сложно использовать без в схеме. Достаточно легко применить к немобильным браузерам :)
Небольшое улучшение: input[type=text], input[type=password], input[type=email], textarea, select { outline: none; }
Обратите внимание, что вы также можете изменить цвет, если хотите, установив свойство outline-color в своем CSS для автозаполнения, Chrome просто имеет значение по умолчанию.
Удаление контура с помощью CSS может предотвратить пожелтение, но не предотвратит фактическое автозаполнение. Если вы хотите это сделать, важно использовать атрибут автозаполнения, нестандартный или нет.
У меня это сработало:: focus,: active {outline: none! Important; }
Пожалуйста, ПРЕКРАТИТЕ голосование за этот ответ, поскольку он полностью НЕ отвечает на вопрос! Вопрос касался автозаполнения, а не фокусировки!
@griffin Смешно, да? Как небольшое недоразумение может перевесить принятый ответ, почти 3 к 1. Это может не решить проблему автозаполнения, но оно действительно решает проблему цвета, которая в вопросе, неоднократно. Не стоит расстраиваться, люди, очевидно, сочли этот вопрос полезным, этот вопрос просто вводит в заблуждение.
«перекрашивать поля ввода» в случае «автозаполнения», но вы говорите о цвете фона в случае фокуса, который совершенно другой. Извините, но вы не отвечаете на вопрос, и он НЕ решает проблему примененного цвета фона в случае автозаполнения, поскольку автозаполненные поля не обязательно фокусируются одновременно! И если людей приведут сюда, когда они попытаются что-то изменить в автозаполнении, они, очевидно, также столкнутся с вашим неправильным ответом, который противоречит цели stackoverflow, которая заключается в помощи людям в решении имеющихся у них проблем.
Я думаю, что сообщество ясно высказалось по этому поводу. Многие люди вводят в заблуждение (если проанализировать вопрос и проявить к нему разборчивость), но ответ по-прежнему устраивает большинство, потому что он (каким-то странным образом) уловил их намерения. Вот для чего нужны голоса. Если это почему-то не соответствует вашим ожиданиям, это нормально, но я верю, что вы принадлежите к меньшинству.
Используя немного jQuery, вы можете удалить стили Chrome, сохранив при этом функциональность автозаполнения. Я написал об этом небольшой пост здесь: http://www.benjaminmiles.com/2010/11/22/fixing-google-chromes-yellow-autocomplete-styles-with-jquery/
if (navigator.userAgent.toLowerCase().indexOf("chrome") >= 0) {
$(window).load(function(){
$('input:-webkit-autofill').each(function(){
var text = $(this).val();
var name = $(this).attr('name');
$(this).after(this.outerHTML).remove();
$('input[name=' + name + ']').val(text);
});
});}
Спасибо за подсказку! Однако после публикации формы и нажатия кнопки «Назад» желтая подсветка вернулась. Я расширил ваш фрагмент (см. Мой ответ), чтобы охватить это.
+1 @Benjamin хорошее решение, немного мигает желтым, но в конце исправляет;)
Чтобы удалить границу для всех полей, вы можете использовать следующее:
*:focus { outline:none; }
Чтобы удалить границу для полей выбора, просто примените этот класс к нужным полям ввода:
.nohighlight:focus { outline:none; }
Конечно, вы также можете изменить границу по своему желанию:
.changeborder:focus { outline:Blue Solid 4px; }
(От Билла Бекельмана: Отменить автоматическую границу Chrome вокруг активных полей с помощью CSS)
На мой взгляд, более простой способ:
Используйте этот код:
if (BrowserDetect.browser == "Chrome") {
jQuery('form').attr('autocomplete','off');
};
input:focus { outline:none; }
Это отлично сработало для меня, но, скорее всего, чтобы сохранить единообразие на вашем сайте, вы также захотите включить это в свой CSS для текстовых полей:
textarea:focus { outline:none; }
Также большинству это может показаться очевидным, но для новичков вы также можете установить цвет как таковой:
input:focus { outline:#HEXCOD SOLID 2px ; }
С jQuery это проще простого:
if ($.browser.webkit) {
$("input").attr('autocomplete','off');
}
Или, если вы хотите быть более избирательным, добавьте имя класса для селектора.
После применения @Benjamin его решения я обнаружил, что нажатие кнопки возврата по-прежнему дает мне желтый свет.
Мое решение как-то, чтобы предотвратить появление этого желтого выделения, заключается в применении следующего jQuery javascript:
<script type = "text/javascript">
$(function() {
if (navigator.userAgent.toLowerCase().indexOf("chrome") >= 0) {
var intervalId = 0;
$(window).load(function() {
intervalId = setInterval(function () { // << somehow this does the trick!
if ($('input:-webkit-autofill').length > 0) {
clearInterval(intervalId);
$('input:-webkit-autofill').each(function () {
var text = $(this).val();
var name = $(this).attr('name');
$(this).after(this.outerHTML).remove();
$('input[name=' + name + ']').val(text);
});
}
}, 1);
});
}
});
</script>
Надеюсь, это поможет кому-нибудь !!
Это работает. Лучше всего то, что вы можете использовать значения rgba (взлом вставки box-shadow не работает с rgba). Это небольшая настройка ответа @Benjamin. Я использую $ (document) .ready () вместо $ (window) .load (). У меня вроде работает лучше - теперь FOUC намного меньше. Я не верю, что у использования $ (document) .ready () есть недостатки.
if (navigator.userAgent.toLowerCase().indexOf("chrome") >= 0) {
$(document).ready(function() {
$('input:-webkit-autofill').each(function(){
var text = $(this).val();
var name = $(this).attr('name');
$(this).after(this.outerHTML).remove();
$('input[name=' + name + ']').val(text);
});
});
};
это именно то, что вы ищете!
// Just change "red" to any color
input:-webkit-autofill {
-webkit-box-shadow: 0 0 0px 1000px red inset;
}
это отличный хак. Спасибо
К этому я бы тоже добавил акцента: D input:-webkit-autofill, input:focus:-webkit-autofill { -webkit-box-shadow: 0 0 0px 1000px #FFF inset; }
привет @JStormThaKid, я использовал это ..., но не сработал для правильного ввода ... пожалуйста, ответьте на это ...
Спасибо за ответ на вопрос, который он задал! Я почти начал терять надежду.
Лучший ответ здесь, я все еще хотел автозаполнение Google, поэтому спасибо
для сегодняшних версий это тоже работает, если поместить его в один из двух входов для входа в систему. Также исправьте проблему с версией 40+ и поздней версии Firefox.
<input readonly = "readonly" onfocus = "this.removeAttribute('readonly');" />
это проблема не только в Chrome. Панель инструментов Google для других браузеров делает то же «пожелтение» полей ввода.