【问题标题】:How can you use form validation to go through multiple options?如何使用表单验证来处理多个选项?
【发布时间】:2019-05-07 00:39:34
【问题描述】:

表单验证的其余部分工作正常,直到我做到这一点: Sex 必须是等于 M、m、F 或 f 的单个字符

<script>
    function verify() {
        if (document.forms[0].age.value < 18) {
            alert ("Age must be between 18 and 30");
            return false;
        } 
        if (document.forms[0].age.value > 30) {
            alert ("Age must be between 18 and 30");
            return false;
        } 
        if (document.forms[0].age.value == "") {
            alert ("Age must be between 18 and 30");
            return false;
        } 
        if (document.forms[0].last.value == "") {
            alert ("Last name canot be empty.");
            return false;
        } 
        if (document.forms[0].sex.value !== "M" || "m" ||"F" ||"f")
            alert ("Please indicate your sex.");
            return false;
        } 
        alert ("Thank you for your submission.")
            return true;
    }
</script>

预期:表单提交的每个问题的弹出窗口。在添加有关性别验证的内容之前,我得到了一些。

实际:现在没有弹出窗口。

【问题讨论】:

  • 你不能像那样组合测试;您需要完整地陈述每个表达式。更简单的方法是测试值是否包含在字符串"MmFf"中。
  • 在表单验证方面,有许多假设是一个好的表单不允许的(即使在美国,一个人也可以合法地只有一个名字。您的表单将这些人锁定在外面。询问他们的法定姓名,让他们根据这意味着什么来填写?此外,询问人们的性别或性别几乎总是让自己受到投诉,除非您有真正的医疗理由知道该信息)。也就是说,如果您有一组预定义的互斥值,请使用单选组,这样人们就无法在没有 DOM 黑客的情况下设置无效值。

标签: javascript forms validation if-statement boolean


【解决方案1】:

您对性别的验证不正确。执行布尔值或 (||) 时,条件必须出现在 || 的所有边上。

要解决此问题,请将您的性别验证代码更改为:

 var sex = document.forms[0].sex.value;
 if ( sex !== "M" || sex !== "m" || sex !== "F" || sex !== "f") {
     alert ("Please indicate your sex.");
     return false;
 } 

如您所见,if 语句分别检查每个值的性别。

【讨论】:

  • 这至少让我的弹出窗口再次工作,但现在,无论我在性别字段中输入什么,弹出窗口都会返回“请注明您的性别”。
  • 将每个|| 替换为&amp;&amp;。 (每个值都不等于其中至少三个,因此当前测试始终为阳性)
  • 谢谢克里斯!我现在真的明白了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-02
  • 2015-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多