Неактивные обязательные поля и проблема с Firefox

Использование jQuery в раскрывающемся списке для отображения / скрытия полей ввода текста в соответствии с раскрывающимся списком вызывает странное поведение в Firefox, не позволяя отправлять форму до тех пор, пока ВСЕ "обязательные" поля не будут заполнены, даже если эти обязательные поля скрыты в зависимости от выбора из раскрывающегося списка, или, так сказать, они фактически неактивны.

Safari просто игнорирует невидимые «обязательные» поля и проверяет только активные (видимые) обязательные поля, и если они заполнены, форму можно отправить.

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

Пример:

<select id="theselect" name="something">
    <option value="1" selected>One</option>
    <option value="2">Two</option>
    <option value="3">Three</option>
</select>

<input type="text" name="one" required="required" class="show" />
<input type="text" name="two" required="" class="hide" />
<input type="text" name="three" required="required" class="hide" />

В приведенном выше примере, имея в виду, что входы два и три скрыты, но требуются, если выбор изменится на 2 или 3, что изменит состояние / видимость соответствующего входа, Firefox принудительно заполняет все необходимые поля.

Кто-нибудь испытал это и / или имеет какое-то представление о том, как эффективно управлять этим с помощью jQuery? Заранее благодарим за любые мысли и помощь по этому поводу.


person McRui    schedule 19.11.2012    source источник
comment
используйте метод prop() для переключения required одновременно с переключением дисплея   -  person charlietfl    schedule 19.11.2012


Ответы (1)


Даже поля, которые являются «скрытыми», отправляются. Поэтому, если они помечены как «обязательные», они вызовут сбой проверки. Спецификация очень четко об этом говорит.

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

person Boris Zbarsky    schedule 19.11.2012
comment
Спасибо, Борис, и да, на самом деле это подход, но, насколько я мог проверить, это специфическая проблема Firefox. Хорошо, для кросс-браузерной совместимости необходимо изменить их атрибуты и установить их как ненужные. - person McRui; 19.11.2012
comment
Если это специфично для Firefox, это означает, что другие браузеры не делают то, что указано в спецификации. :( - person Boris Zbarsky; 19.11.2012
comment
Ну, по крайней мере, Safari на Mac игнорирует все, что скрыто, при проверке полей, хотя я обнаружил, что проблема, с которой я имею дело, выходит за рамки браузера (хотя то, что я упомянул, верно в отношении поведения браузера). Я обнаружил, что это довольно сложно из-за mootools validate.js, который накладывает aria-invalid, aria-required и required = required, если он находит требуемый класс css в поле. Теперь использование вышеупомянутых методов для удаления или добавления необходимых свойств становится просто стогом сена условий, которые, вероятно, лучше отключить validate.js. - person McRui; 19.11.2012
comment
Да, похоже, что Safari реализует очень ранний черновик спецификации, а не то, что говорится в спецификации сейчас. - person Boris Zbarsky; 19.11.2012