javascript - 仅使用 javascript 提示用户至少选择一个复选框

标签 javascript html

您好,我有一个 HTML 表单,它已经提示用户填写空白字段。这是我正在使用的脚本:

<!-- Script to prompt users to fill in the empty fields -->
    <script type="text/javascript">
        document.addEventListener("DOMContentLoaded", function() {
            var elements = document.getElementsByTagName("INPUT");
            for (var i = 0; i < elements.length; i++) {
                elements[i].oninvalid = function(e) {
                    e.target.setCustomValidity("");
                    if (!e.target.validity.valid) {
                        e.target.setCustomValidity("To continue, you must correctly fill in the missing fields.");
                    }
                };
                elements[i].oninput = function(e) {
                    e.target.setCustomValidity("");
                };
            }
        });
    </script>

这个脚本工作完美,它会弹出一个很好的提示,如下所示:

enter image description here

它适用于所有输入文本字段,但我需要另一个脚本来(a)检查表单底部至少有一个复选框被选中,并且>(b) 将弹出一个提示,其样式与上面的提示相同。

我查看了其他帖子并编写了以下脚本。我通过 ID 引用了复选框,并以某种方式使用了上述脚本中的函数 function(e)。好吧,这对我不起作用,但我必须接近......

<!-- Script which prompts user to check at least one checkbox -->
<script type="text/javascript">
    document.addEventListener("DOMContentLoaded", function() {
        if (
            document.getElementById("linux-c-arm-checkbox").checked == false &&
            document.getElementById("linux-eda-cad-checkbox").checked == false &&
            document.getElementById("linux-blender-checkbox").checked == false &&
            document.getElementById("linux-photo-checkbox").checked == false &&
            document.getElementById("linux-audio-checkbox").checked == false &&
            document.getElementById("linux-latex-checkbox").checked == false &&
            document.getElementById("linux-desktop-checkbox").checked == false &&
            document.getElementById("linux-office-checkbox").checked == false
        ){
            function(e) {
                e.target.setCustomValidity("");
                if (!e.target.validity.valid) {
                    e.target.setCustomValidity("Please choose at least one checkbox.");
                }
            }
        }
    });
</script> 

任何人都可以帮助我通过使用 javascript 而不使用 JQuery 来解决这个问题吗?

最佳答案

虽然您无法将必需的属性放在复选框组上并对至少一个选择进行验证,但这里有一个解决方案。对您的 HTML 进行相应的更改。

它采用隐藏的文本框作为所选复选框组的占位符。如果至少选择了一个,则隐藏字段也将具有该值。

function setAccount() {
      if (document.querySelectorAll('input[name="gender"]:checked').length > 0)
          document.querySelector("#socialPlaceholder").value = document.querySelector('input[name="gender"]:checked').value;
      else
          document.querySelector("#socialPlaceholder").value = "";
}

function invalidMsg(textbox) {
      if (textbox.value == '') {
          textbox.setCustomValidity('Please select at least one account');
      } else {
          textbox.setCustomValidity('');
      }
}
        
<form target="_blank">
    <b>Accounts</b>
    <input type="text" id="socialPlaceholder" required value="" style="width:0px;height:0px;position: relative;left:-30px;opacity: 0;" oninvalid="invalidMsg(this)"/><br/>

    <label>Facebook<input type="checkbox" name="gender" value="facebook" onClick="setAccount()"/></label>
    <label>Twitter<input type="checkbox" name="gender" value="twitter" onClick="setAccount()"/></label>
    <label>Google Plus<input type="checkbox" name="gender" value="google_plus" onClick="setAccount()"/></label>
    <label>Instagram<input type="checkbox" name="gender" value="instagram" onClick="setAccount()"/></label>
    </br>
    </br>
    <input type="submit" value="Submit" />
    <br/><br/>
    NOTE: Submit without selecting any account to see the validation message
</form>

关于javascript - 仅使用 javascript 提示用户至少选择一个复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43537335/

相关文章:

javascript - Video.js cancelFullScreen api 方法在 Firefox 中不起作用

javascript - 为什么这个 jquery 下拉菜单不起作用?

php - _SESSION ['xxx' ] 未在我的 Web 应用程序中跨页面保留

html - 在 CSS/HTML 中重新居中网页

jquery - 如何在单选按钮上禁用 jquery 日期选择器

javascript - d'n'd 如何通过 Ajax 传输文件(或文件夹)?

javascript - 如何使用jquery获取outerHTML以使其跨浏览器

javascript - 选择框值未在引导模式上设置

javascript - 获取最新出现的对象值

javascript - 如何使用jquery改变div的颜色?