带有select required属性的HTML5验证错误

Sob*_*fly 20 html-select w3c-validation

使用以下代码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>   
Run Code Online (Sandbox Code Playgroud)

我需要的值与指南所要求的选项相同.此代码工作正常,但未通过W3C验证:

一个select带有元素required属性,没有multiple属性,其大小为1,必须有一个子option元素.

这个问题的解决方案是什么?

Pan*_*ool 31

使用以下内容

<option value="">Choose</option>
Run Code Online (Sandbox Code Playgroud)

将上述系列作为第一个选项附加

  • 被视为有效,因为第一个子元素没有内容.


sid*_*ker 20

这里是W3C HTML Checker(aka验证器)的维护者.

现在看来你必须使用一个不间断的空间来传递验证器:

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

是的,我不确定我何时在检查器中更改了它.我认为我在几年内没有改变任何东西,但无论如何,检查器符合HTML规范,因为如果你去https://html.spec.whatwg.org/multipage/forms.html #the-option-element并阅读该部分头部的内容模型子部分,您将看到:

如果元素没有label属性:不是元素间空格的文本.

在HTML中,哪些字符可以是inter-element whitespace字符定义仅包括U + 0020(空格),制表符,U + 000A(LF),U + 000C FORM FEED和U + 000D(CR).

换句话说,HTML基本上将非中断空格字符视为Text而不是空格字符 - 因此将其放在option元素中会使该option元素"非空"(就规范而言).

所以,做<option value="">&nbsp;</option>不是真正的黑客; 相反,它是一种非常合理的方式(同样,就规范而言)option是非空的.


Rya*_*yan 13

有时你真的只想要一个空白选项.您曾经能够只插入一个空格,而w3c验证器会接受它.这曾经工作:

<option value=""> </option>
Run Code Online (Sandbox Code Playgroud)

现在看来你必须使用一个不间断的空间来传递验证器:

<option value="">&nbsp;</option>
Run Code Online (Sandbox Code Playgroud)

  • 你不爱进步! (5认同)