Firefox 4: есть ли способ удалить красную рамку в обязательном вводе формы?

Когда в поле формы определено required, Firefox 4 автоматически показывает красную рамку для этого элемента, даже ДО того, как пользователь нажмет кнопку отправки.

<input type="text" name="example" value="This is an example" required />

Я думаю, что это беспокоит пользователя, так как он не делал ошибок в начале.

Я хочу скрыть эту красную рамку для начального состояния, но показать ее, когда пользователь нажимает кнопку отправки, если есть отсутствующее поле, помеченное как обязательное.

Я посмотрел на :required и :invalid из нового псевдоселектора, но изменения были для до и после проверки. (из Firefox 4 Обязательная форма ввода КРАСНАЯ граница/контур)

Есть ли способ отключить красную рамку до того, как пользователь отправит форму, и показать ее, если есть пропущенные поля?


person Cyril N.    schedule 09.05.2011    source источник
comment
Как насчет схемы: 0; ?   -  person Ace    schedule 19.05.2014


Ответы (7)


Начиная с Firefox 26, фактический CSS, используемый для определения недопустимых обязательных полей, выглядит следующим образом (взято из forms.css):

:not(output):-moz-ui-invalid {
    box-shadow: 0 0 1.5px 1px red;
}

Для репликации в других браузерах я использую:

input:invalid {
    box-shadow: 0 0 1.5px 1px red;
}

Я поигрался с настройками пикселей, но я бы никогда не догадался о 1,5 пикселях, не глядя на исходный код moz.

Чтобы отключить его, вы можете использовать:

input:invalid {
    box-shadow: none;
}
person Dan    schedule 18.01.2014
comment
Небольшая точность: это должно быть :not(output):-moz-ui-invalid, а не input:not(output):-moz-ui-invalid для тех, кто попробовал, понравилось. - person Skoua; 22.01.2020
comment
Вы абсолютная легенда. - person abejdaniels; 20.05.2020

Пытаться:

document.getElementById('myform').reset();
person Andriy    schedule 30.04.2019
comment
Это должен быть принятый ответ. Firefox (и большинство браузеров, которые я тестировал) не будет помечать поле ввода как недействительное, если пользователь даже ничего не ввел. Это не должно быть проблемой. Я подозреваю, что спрашивающий делает то же самое, что и я, повторно используя форму в одностраничном приложении. Сброс формы очищает все красные границы неверного ввода. - person Daniel Wu; 06.01.2021
comment
Я использую изначально отключенную опцию в качестве заполнителя, чтобы заставить пользователей выбирать опцию. .reset() просто избегайте этого и автоматически выбирает правильный вариант: S - person daVe; 30.06.2021

Вот очень простое решение, которое сработало для меня. Я в основном изменил уродливый красный цвет на очень красивый синий, который является стандартным цветом для необязательных полей и веб-конвенцией:

:required {
    border-color: rgba(82, 168, 236, 0.8);
}
person Randy Greencorn    schedule 14.08.2013

Это хорошо сработало для меня:

input:invalid {
     -moz-box-shadow: none;
}
person WVDominick    schedule 20.05.2011
comment
Проблема здесь в том, что после проверки тень блока не исчезает, и пользователь не имеет ни малейшего представления о том, где возникают ошибки. Я хочу НЕ отображать красную рамку в нормальном состоянии формы, а показывать ее, когда пользователь отправляет/размывает форму, если есть ошибка. - person Cyril N.; 31.05.2011

Пожалуйста, попробуйте это,

$("форма").attr("novalidate",true);

для вашей формы в вашем глобальном файле .js или в разделе заголовка.

person Anoop Velluva    schedule 19.06.2015

Способ, который я нашел, по крайней мере, в основном решил проблему:

<input type="text" name="example" value="This is an example" onInput="this.required = true;" />

Таким образом, поле ввода начинается с красивого синего контура, но как только пользователь вводит символ, он становится обязательным (поэтому, если вы вводите символ, а затем клавишу Backspace, появляется красная рамка). В этом случае пользователь может пропустить ввод, поэтому обязательно установите внутреннюю проверку, если вы это сделаете.

person kylew    schedule 16.11.2020

person    schedule
comment
Отличный прорыв, но недопустимая ошибка, кажется, отображается, когда пользователь нажимает на ввод =>, когда ввод пуст, ДО того, как он действительно что-то напишет. Но, возможно, я хочу, чтобы ошибка в FF4 не могла быть устранена :/ - person Cyril N.; 31.05.2011
comment
Но +1 за ваш способ ограничения ужасной тени красного поля :) - person Cyril N.; 31.05.2011
comment
Не думайте, что вы можете сделать это, потому что, как ни странно, это почти слишком умно и проверяется на лету. Вы могли бы быть умнее с некоторым дополнительным javascript, который добавлял или удалял класс из формы при ее отправке. Затем вы можете переопределить любую подсветку проверки в зависимости от того, присутствует этот класс или нет. Самое приятное в этом то, что он по-прежнему использует встроенную проверку, что не так приятно, требует дополнительных js... :| - person Stuart Burrows; 31.05.2011
comment
вдохновился приготовлением завтрака - добавлено выше! - person Stuart Burrows; 01.06.2011
comment
Умная! :p Но если вы посмотрите, у вас есть тень для исходного состояния И тень блока для недопустимого состояния. Оба они показаны. Я начинаю думать, что это ошибка Мозиллы, они не подумали о начальном состоянии. Если это правильно, и никто другой не добавит полностью работающий способ сделать это, я не приму ваш ответ, но дам вам награду (надеюсь, это возможно, если нет, я приму ваш ответ). Вы это заслужили :) Спасибо за помощь! - person Cyril N.; 01.06.2011
comment
спасибо за комментарий :). Просто чтобы проверить - вы смотрите на вторую скрипку? Я получаю только 1 тень после табуляции, когда вводится недопустимый контент - не во время ввода и не до этого. Не видно никакой тени по умолчанию — она должна быть удалена начальным объявлением css. Теперь мне любопытно, почему мы видим разные результаты... Кроме того, я издевался над потенциальным решением javascript (с грязными встроенными функциями) с двумя примерами: jsfiddle.net/c5aTe/4 - person Stuart Burrows; 01.06.2011
comment
Ну, я знаю, что второй jsfiddle у меня не работал... Я тестировал его в Chrome (позор мне). Но это раскрывает другую проблему (тогда для другого вопроса): почему проблема теперь в Chrome: p Что ж, вы заслужили награду и принятый ответ, поскольку теперь это работает для FF! Не могли бы вы обновить свой ответ вторым jsfiddle и последним, который вы предложили, оба отлично работают (один только в FF, второй, используя JS, в обоих). Это может помочь другим пользователям, имеющим ту же проблему. Еще раз спасибо :) - person Cyril N.; 01.06.2011
comment
(Я могу присудить награду только через 56 минут... вам придется подождать ;)) - person Cyril N.; 01.06.2011
comment
Woot - добавлено к моему ответу, как вы предложили. :) - person Stuart Burrows; 01.06.2011
comment
Спасибо ! Осталась 31 минута... :p - person Cyril N.; 01.06.2011
comment
Мне просто нужно было сделать это: select[required] {box-shadow:none !important; } - person Maxence; 05.01.2013