表单中的单选/复选框“必需”属性?

Posted

技术标签:

【中文标题】表单中的单选/复选框“必需”属性?【英文标题】:Radio/checkbox 'required' attribute in a form? 【发布时间】:2017-05-11 00:00:26 【问题描述】:

MDL 版本:1.3.0。

浏览器:谷歌浏览器 55.0.2883.87 m

操作系统:Windows 10。

我正在尝试使用 MDL 进行简单的调查。带有单选框或复选框作为答案的问题列表。页面加载时不会预先选中单选/复选框,用户必须为每个答案选中单选或至少一个复选框。 如果用户没有为至少一个问题选择答案,则单击提交按钮时应显示标准通知(弹出窗口,指向第一个单选框/复选框,并带有文本“请选择其中一个选项”)。

我正在为收音机使用 required 属性,但是在提交所需的弹出窗口时只是“闪烁”(显示和隐藏非常快)并且没有正确显示。

简单的演示在codepen。

<html>
<head>
    <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
    <link rel="stylesheet" href="https://code.getmdl.io/1.3.0/material.indigo-pink.min.css">
    <script defer src="https://code.getmdl.io/1.3.0/material.min.js"></script>
</head>

<body>
  <br/>
  <br/>
    <form>
        <label class="mdl-radio mdl-js-radio mdl-js-ripple-effect" for="option-1">
            <input type="radio" id="option-1" class="mdl-radio__button" name="options" value="1" required>
            <span class="mdl-radio__label">First</span>
        </label>
        <br/>

        <label class="mdl-radio mdl-js-radio mdl-js-ripple-effect" for="option-2">
            <input type="radio" id="option-2" class="mdl-radio__button" name="options" value="2" required>
            <span class="mdl-radio__label">Second</span>
        </label>
        <br/><br/>
        <button class="mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect mdl-button--accent" type="submit" id="submit">Submit</button>
    </form>
</body>

</html>

【问题讨论】:

【参考方案1】:

CSS 中存在问题。似乎如果您隐藏输入(没有宽度/高度和外观 = none),错误消息只会显示一小段时间。如果输入不可见,也许这是预期的浏览器行为?

此解决方法会有所帮助,但可以肯定的是,您将不得不处理其他类型的表单输入中的其他问题:

.mdl-radio.is-upgraded .mdl-radio__button 
position: absolute;
width: 1px;
height: 1px;
margin: 0;
padding: 0;
opacity: 0;
-ms-appearance: radio;
-moz-appearance: radio;
-webkit-appearance: radio;
appearance: radio;
border: none;
margin-left: -20px;

Codepen:http://codepen.io/anon/pen/YpozzO

非常相似的问题:Material design lite required validation on checkbox is not showing error message

【讨论】:

【参考方案2】:

问题不在代码中。它只是那样工作。真正的问题在于脚本

您用来设置提交按钮样式的引导脚本没有使用必需的选项。 如果您想检查它,请评论它,您的代码将按照您的意愿运行。消息不会像闪存一样消失。

解决方案: 您可以在提交按钮上使用 javascript 函数,该函数将检查上述两个字段之一是否被标记。

【讨论】:

以上是关于表单中的单选/复选框“必需”属性?的主要内容,如果未能解决你的问题,请参考以下文章

MFC的单选按钮、复选框问题

点击文字也可选中相对应的单选按钮或复选按钮

javascript中的单选按钮验证

选中复选框时选择特定的单选选项jQuery

jQuery,阻止表单提交,然后继续

Flutter学习日记之表单组件Radio单选框&Checkbox复选框的使用