Подтвердить что ты не робот

Ошибка проверки HTML5 с помощью атрибута select

Используя следующий код на select:

<select name="province" id="province" required="required"> 
    <optgroup label="Provinces">
         <option value="Alberta">Alberta</option>
         <option value="British Colombia">British Colombia</option>
         <option value="Manitoba">Manitoba</option>
         <option value="New Brunswick">New Brunswick</option>
         <option value="Newfoundland and Labrador">Newfoundland and Labrador</option>
         <option value="Nova Scotia">Nova Scotia</option>
         <option value="Ontario" selected="selected">Ontario</option>
         <option value="Prince Edward Island">Prince Edward Island</option>
         <option value="Quebec">Quebec</option>
         <option value="Saskatchewan">Saskatchewan</option>
    </optgroup>
         <optgroup label="Territories">
         <option value="Northwest Territories">Northwest Territories</option>
         <option value="Nunavut">Nunavut</option>
         <option value="Yukon">Yukon</option>
    </optgroup>
</select>   

Мне нужно иметь такие же значения, как и параметры, которые требуются только в соответствии с рекомендациями. Этот код работает нормально, но не проходит проверку W3C:

A select с атрибутом required и без атрибута multiple и размером 1, должен иметь дочерний элемент option.

Каким будет решение этой проблемы?

4b9b3361

Ответ 1

Используйте следующие

<option value="">Choose</option>

Добавьте вышеприведенную серию в качестве первого варианта

  • считается действительным, поскольку первый дочерний элемент не имеет содержимого.

Ответ 2

Иногда вы просто хотите иметь пустой параметр. Раньше вы могли просто вставить одно пространство, и валидатор w3c примет его. Это использовалось для работы:

<option value=""> </option>

Теперь, кажется, вы должны использовать неразрывное пространство для прохождения проверки:

<option value="">&nbsp;</option>

Ответ 3

Поддерживающий W3C HTML Checker (aka validator) здесь.

Теперь, кажется, вы должны использовать неразрывное пространство для прохождения проверки:

<option value="">&nbsp;</option>

Да, я не уверен, когда я изменил это в контролере. Я думал, что ничего не изменил через пару лет, но, несмотря на это, контролер соответствует спецификации HTML на этом, потому что если вы перейдете к https://html.spec.whatwg.org/multipage/forms.html#the-option-element и прочитайте подразделение Content model в главе этого раздела, вы увидите:

Если элемент не имеет атрибута метки: Текст, который не является межэлементным пробелом.

В HTML определение символов inter-element whitespace включает в себя только U + 0020 (пробел), вкладку U + 000A (LF), U + 000C FORM FEED и U + 000D (CR).

Другими словами, HTML по существу рассматривает неразрывный символ пробела как текст, а не символ пробела, поэтому его внутри элемента option делает этот элемент option "непустым" (насколько это возможно spec).

Итак, выполнение <option value="">&nbsp;</option> действительно не рушится; вместо этого, это вполне разумный способ (опять же, что касается спецификации) сделать option непустым.