Неактивни задължителни полета и проблем с 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