Firefox 4: Чи є спосіб видалити червону межу в потрібному введенні форми?


85

Коли необхідне визначено у полі форми, Firefox 4 автоматично відображає червону межу до цього елемента, навіть ДО того, як користувач натисне кнопку подати.

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

Я думаю, це турбує користувача, оскільки він / вона не робив помилок на початку.

Я хочу приховати цю червону межу для початкового стану, але показати її, коли користувач натисне кнопку відправки, якщо відсутнє поле позначене як необхідне.

Я дивився на :requiredта :invalidз нового псевдоселектора, але зміни стосуються до І після перевірки. (з Firefox 4 Обов’язкова форма введення ЧЕРВОНА облямівка / контур )

Чи є спосіб вимкнути червону межу до того, як користувач подасть форму, і показати її, якщо відсутні якісь поля?


1
Як щодо контуру: 0; ?
Туз

Відповіді:


150

Це було трохи складно, але я створив цей приклад: http://jsfiddle.net/c5aTe/, який працює на мене. В основному, фокус, схоже, полягає в тому, щоб обійти текст недійсного тексту-заповнювача. В іншому випадку ви зможете зробити це:

input:required {
    box-shadow:none;
}
input:invalid {
    box-shadow:0 0 3px red;
}

або щось подібне ...

АЛЕ оскільки FF4 вирішує перевірити ваш текст заповнювача (не маючи уявлення, чому ...), рішення у скрипці (трохи хакі - використання !important) є необхідним.

Сподіваюся, це допоможе!

РЕДАГУВАТИ

Дох !! - Я почуваюся добре безглуздо. Я оновив свою скрипку: http://jsfiddle.net/c5aTe/2/ - ви можете використовувати :focusпсевдо-клас, щоб зберегти елемент стилізованим, якби він був правильним, поки користувач вводить текст. Це все одно буде виділено червоним кольором, якщо вміст недійсний, коли елемент втрачає фокус, але я думаю, що ви можете зробити лише так багато з розробленою поведінкою ...

HTH :)


РЕДАКТУВАТИ після прийняття:

Короткий зміст прикладів на запит OP (зверніть увагу, перші два призначені лише для FF4, а не для Chrome )

  1. Виправлення для FF перевірки тексту власника місця: http://jsfiddle.net/c5aTe/
  2. Виправлено перевірку FF під час введення: http://jsfiddle.net/c5aTe/2
  3. Рішення JS для перемикання стилів / перевірки: http://jsfiddle.net/c5aTe/4

Великий прорив, але, здається, відображається помилка "недійсна", коли користувач натискає на введення => коли введення порожнє, ДО того, як він насправді щось пише. Але можливо, що я хочу, це помилка в FF4, яку неможливо вирішити: /
Кирило Н.

Але +1 за ваш спосіб обмежити жахливу тінь червоного ящика :)
Кирило Н.

Не думайте, що ви можете це зробити, оскільки, як не дивно, це майже занадто розумно і підтверджується на льоту. Ви можете бути розумними з додатковим javascript, який додав або видалив клас із форми при його надсиланні. Тоді ви можете замінити будь-яке виділення перевірки на основі присутності цього класу чи ні. Приємно в цьому те, що він все ще використовує власну перевірку, не так приємно вимагати додаткових js ...: |
Стюарт Берроуз,

1
мав трохи натхнення під час приготування сніданку - додано вище!
Стюарт Берроус,

Розумні! : p Але якщо ви подивитесь, у вас буде тінь для початкового стану І тінь поля для недійсного стану. Показані обидва. Я починаю вірити, що це помилка від Mozilla, вони не думали про початковий стан. Якщо це правильно, і ніхто інший не додасть повністю працюючого способу це зробити, я не прийму вашу відповідь, але дам вам щедрість (сподіваюся, це можливо, якщо ні, я прийму вашу відповідь). Ви цього заслужили :) Дякую за допомогу!
Кирило Н.

38

Починаючи з Firefox 26, фактичний CSS, який використовується для ідентифікації недійсних обов’язкових полів, є таким (походить із форм.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.5px, не дивлячись на джерело moz.

Щоб вимкнути його, ви можете використовувати:

input:invalid {
    box-shadow: none;
}

Мала точність: це повинно бути :not(output):-moz-ui-invalidне input:not(output):-moz-ui-invalidдля тих, хто намагався сподобатися.
Skoua

Ви абсолютна легенда.
abejdaniels

2

Ось дуже просте рішення, яке мені вдалося. В основному я змінив потворний червоний на дуже приємний синій, який є стандартним кольором для необов’язкових полів, і веб-домовленість:

:required {
    border-color: rgba(82, 168, 236, 0.8);
}

1

Це мені вдало:

input:invalid {
     -moz-box-shadow: none;
}

7
Проблема в тому, що після перевірки тінь вікна залишається жодною, і користувач не знає, де трапляються помилки. Я хочу, щоб НЕ відображати червону рамку в звичайному стані форми, а показувати її, коли користувач подає / розмиває форму, якщо є помилка.
Кирило Н.


0

Будь ласка, спробуйте це,

$ ("форма"). attr ("недійсна", правда);

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.