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

时间:2014-03-06 22:36:50

标签: 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>   

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

  

select元素具有required属性且没有multiple属性且大小为1,必须具有子option元素。

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

3 个答案:

答案 0 :(得分:31)

使用以下

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

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

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

答案 1 :(得分:18)

W3C HTML Checker(又名验证器)的维护者。

  

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

     

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

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

  

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

在HTML中,definition of which characters can be inter-element whitespace characters仅包括U + 0020(空格),制表符,U + 000A(LF),U + 000C FORM FEED和U + 000D(CR)。

换句话说,HTML基本上将不间断空格字符视为文本而不是空格字符 - 因此将其置于option元素内会使option元素“非空”(就规范而言)。

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

答案 2 :(得分:13)

有时你真的只想要一个空白选项。您曾经能够只插入一个空格,而w3c验证器会接受它。过去常常这样做:

<option value=""> </option>

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

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