我可以将必需的属性应用于HTML5中的<select>字段吗?


256

如何检查用户是否从<select>HTML5 的字段中选择了某些内容?

我看到<select>不支持新required属性...那我是否必须使用JavaScript?还是我想念的东西?:/


1
如果您对跨浏览器兼容性的任何级别感兴趣,则可能必须使用JavaScript。您想要的属性是selectedIndex
路加·斯诺格

4
根据HTML5规范的当前编辑者草案(2011年8月6日),select元素确实具有必填属性。“ required属性是一个布尔属性。指定后,将要求用户在提交表单之前选择一个值。” dev.w3.org/html5/spec/Overview.html#the-select-element
james.garriss

Answers:


471

必填:将第一个值留空-需要对空值进行处理

先决条件:正确的html5 DOCTYPE和一个命名输入字段

<select name="somename" required>
<option value="">Please select</option>
<option value="one">One</option>
</select>

根据文档(列表和粗体为我的)

必需属性是布尔属性。
指定后,将要求用户在提交表单之前选择一个值。

如果选择元素

  • 已指定必填属性,
  • 没有指定多重属性,
  • 且显示尺寸为1(SIZE = 2或更大-如果不需要,则忽略它);
  • 并且如果select元素的选项列表(如果有)中的第一个option元素的值是空字符串(即以表示value=""),
  • 该选项元素的父节点是选择元素(而不是optgroup元素),

那么该选项就是选择元素的占位符标签选项。


27
此外,一旦选择,用户就无法选择该非选项:<option selected =“ selected” Disabled =“ disabled” value =“”>请选择</ option>
CoolAJ86

2
那没有道理...而且在某些浏览器上也无法使用
mplungjan

4
@ CoolAJ86可以在Chrome 23,Firefox 16和IE 10中正常运行。
KTB

15
我看到2张反对票。如果你觉得这downvoting 以评论为什么
mplungjan

1
文档的措辞非常有帮助;谢谢
skia.heliou 2015年

13

根据规范,<select>元素确实支持该required属性:

哪个浏览器不满意?

(当然,无论如何,您都必须在服务器上进行验证,因为您不能保证用户将启用JavaScript。)


8
我确定他只需要在第一个条目上使用value =“”-如果没有value属性或所有选项上的值,则由于选择返回实际值而导致触发失败
mplungjan 2011年

1
@mplungjan:,知道了-位置很好。
Paul D. Waite,

1
@ PaulD.Waite我们仍然不能保证用户将启用Javascript吗?我仅从事Web开发大约两年了,从未遇到过这个问题。
user137717

2
@ user137717:是网络。你不能保证任何事情。当然,您可以决定不值得解决。
Paul D. Waite'Aug

5

您可以使用selectedoption元素的属性来默认选择一个选项。您可以将required属性用于select元素,以确保用户选择了某些内容。

在Javascript中,您可以检查selectedIndex属性以获取所选选项的索引,也可以检查value属性以获取所选选项的值。

根据HTML5规范,selectedIndex“返回第一个选定项目的索引(如果有的话,如果没有,则value返回-1。如果没有,则返回-1,如果有,则返回空值,如果有则返回空字符串)。没有选定的项目。”因此,如果selectedIndex = -1,那么您知道他们还没有选择任何项目。

<button type="button" onclick="displaySelection()">What did I pick?</button>
<script>
    function displaySelection()
    {
        var mySelect = document.getElementById("someSelectElement");
        var mySelection = mySelect.selectedIndex;
        alert(mySelection);
    }
</script>

1
@使徒-请停止尝试通过修改来更改此答案。如果您认为这是不正确的,请随时留下您自己的答案。
布拉德·拉尔森

@BradLarson最初我不太了解:代码不是此问题中问题的完整解决方案,也不是该答案最后一段的解释性示例。在这种情况下可能排名第二。我认为最好将此代码组织为一个片段并显示结果-1。抱歉,我没有首先在评论中澄清。
2015年

5

是的,它正在工作:

<select name="somename" required>
     <option value="">Please select</option>
     <option value="one">One</option>
</select>

您必须保留第一个选项为空。


1
<form action="">

<select required>

  <option selected disabled value="">choose</option>
  <option value="red">red</option>
  <option value="yellow">yellow</option>
  <option value="green">green</option>
  <option value="grey">grey</option>

</select>
<input type="submit">
</form>

3
该答案仅重复了先前的示例,而没有其他说明。
james.garriss 2015年

1

首先,您必须在第一个选项中分配空白值。即选择here.than只需要将起作用。


0

将选择框的第一项的值设置为空白。

因此,每当您发布FORM时,您都会获得空值,并且使用这种方式,您将知道用户尚未从下拉菜单中选择任何内容。

<select name="user_role" required>
    <option value="">-Select-</option>
    <option value="User">User</option>
    <option value="Admin">Admin</option>
</select>

0

您需要将value属性设置option为空字符串:

<select name="status" required>
    <option selected disabled value="">what's your status?</option>
    <option value="code">coding</option>
    <option value="sleep">sleeping</option>
</select>

select将返回value所选的option服务器当用户按下submitform。空value与空text输入相同->引发required消息。


w3schools

value属性指定提交表单时要发送到服务器的值。


0

试试这个,这会工作,我已经尝试了这个,这个工作。

<!DOCTYPE html>
<html>
<body>

<form action="#">
<select required>
  <option value="">None</option>
  <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="mercedes">Mercedes</option>
  <option value="audi">Audi</option>
</select>
<input type="submit">
</form>

</body>
</html>

0

如果第一个选项的值为null,则效果很好。说明:HTML5将在按钮提交时读取一个空值。如果不为null(值属性),则假定所选值不为null,因此验证将有效,即通过检查option标记中是否有数据。因此,它不会产生验证方法。但是,我想另一方面,如果value属性设置为null,即(value =“”),HTML5将在第一个或默认选择的选项上检测到空值,从而发出验证消息。感谢您的询问。乐于帮助。很高兴知道我是否愿意。


-1

在html5中,您可以使用完整表达式:

<select required="required">

我不知道为什么短表达式不起作用,但是请尝试使用此表达式。它将解决。


-4

试试这个

<select>
<option value="" style="display:none">Please select</option>
<option value="one">One</option>
</select>

-6

您也可以使用JQuery动态地进行操作

需要设置

$("#select1").attr('required', 'required');

删除必填

$("#select1").removeAttr('required');
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.