如何使用原生 HTML5 约束 API 验证单选组是不是有选择 [重复]

Posted

技术标签:

【中文标题】如何使用原生 HTML5 约束 API 验证单选组是不是有选择 [重复]【英文标题】:How to validate a radio group has a selection using native HTML5 constraint API [duplicate]如何使用原生 HTML5 约束 API 验证单选组是否有选择 [重复] 【发布时间】:2018-11-05 08:49:14 【问题描述】:

MDN page on radio buttons 声明:

验证。 单选按钮不参与约束验证;它们没有真正的价值可以被限制。

但这不是真的。作为一个群体,他们经常需要被验证——例如。如果没有选中默认值,但用户必须选中其中一个选项才能继续。这是一种通常需要的 UX,可防止用户在未做出主动选择的情况下提交表单。

我发现有一个RadioNodeList,它没有提到验证,但这似乎也没有“willValidate()”方法。我希望能够在该级别设置 required 属性,我知道这不是 html 元素,但如果在 JS 中完成,理论上可以提供原生 UX。

我想知道将所选值复制到隐藏或文本字段中并将该字段设置为 required,但 UI 可能会令人困惑。

我知道我可以使用 JS、JQ 等,但我还没有找到验证无线电组的本地方法。

有原生方式吗?


更新:使用required 属性,这确实可以正常工作 - 刚刚在 Safari、Chrome 和 Firefox 中进行了测试。我没有看到它的原因是提交按钮上的 data-close 属性,它在看到本机验证提示之前隐藏了表单。而且 MDN 文档误导我认为该字段根本不支持验证,而它更具体地关注约束 API。

【问题讨论】:

严格来说这不是重复的。虽然我不再关心了,因为required 属性已经解决了我的问题,但是对于如何将Contraint API 与radio 元素或父节点列表一起使用仍然没有答案。 【参考方案1】:

只需在具有相同name 属性的一组单选按钮中的任何单选按钮上设置required。浏览器将强制选择一个单选按钮。您可能还应该在每个单选按钮上设置required,只是为了便于阅读。但是效果是一样的。

例如

<form>
  <label for="radio1">
    <input id="radio1" type="radio" name="groupname" required>
    First radio button
  </label>
  <br>
  <label for="radio2">
    <input id="radio2" type="radio" name="groupname">
    Second radio button
  </label>
  <br>
  <input type="submit">
</form>

【讨论】:

是的,这是正确的。我已经尝试过了,但由于模式对话框在提交时立即关闭,即使表单没有提交,它也没有显示。所以 MDN 文档是错误的。 @scipilot 这是复杂代码库的问题。是的,那个页面一定很旧了。 实际上,经过反思,MDN 页面是正确的,但令人困惑。 radio 元素不支持 Constraint API。但这并不意味着它不支持“必需”属性,也不支持一般的验证。这只意味着它没有willValidate 方法。 好的,是的,它确实可以作为收音机的属性使用。 ...所以无线电的 MDN 文档是错误的!它确实支持 API。 或许是的。我打算使用 API 来打开表单的模态对话框。但我只是做错了。无论哪种方式,您的答案都是相同的正确解决方案。【参考方案2】:

在任何单选按钮或所有单选按钮上设置required 将使单选按钮组按需要进行。查看 w3.org 链接

https://www.w3.org/TR/html5/forms.html#example-27c46ff8

【讨论】:

以上是关于如何使用原生 HTML5 约束 API 验证单选组是不是有选择 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何检查单选按钮是不是在 Android 的单选组中被选中?

用于多个动态创建的复选框或单选组的 jquery 验证器

如何从多个单选组传递单选按钮值?如何解决返回第一个值?

使用 HTML5 原生拖放时如何约束移动?

在 ASP.NET 中设置 Twitter Bootstrap 按钮单选组的活动状态

验证后如何使用 JavaScript 和 HTML5 将图像放在单选按钮上