JavaScript - 简单数据验证中的错误逻辑

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript - 简单数据验证中的错误逻辑相关的知识,希望对你有一定的参考价值。

我对编码非常陌生,并且在使用某些逻辑时遇到了困难。昨晚我问了另一个问题,社区真的很有帮助(谢谢!),所以我想我会再试一次。 `

我正在尝试制作一个收集用户电子邮件和名字的程序。我想检查表单上的每个框中是否输入了某些内容,并且为了确保他们正确输入了他们的电子邮件地址,该emailAddress1与emailAddress2相同。

我已经定义了“var errorMessage =”“;”如果在任何时候出现错误,它会根据用户在表单上犯的错误重新定义一个新的errorMessage。

问题,我认为是第二个if-else语句。我以为如果“errorMessage =”“;”仍然会提交表格。但是,无论它正在执行else语句,我都会收到一条空错误消息的警报。

为什么,如果errorMessage =“”,它是否正在运行else语句并跳过使用errorMessage =“”作为条件的if语句?

"use strict";

var $ = function(id) 
    return document.getElementById(id);
;

var joinList = function() 
    var emailAddress1 = $("email_address1").value;
    var emailAddress2 = $("email_address2").value;	
    var firstName = $("first_name").value;
    var errorMessage = "";

    // validate the entries
    if (emailAddress1 == "") 
    	errorMessage = "First email address entry required";
        $("email_address1").focus();
     else if (emailAddress2 == "") 
    	errorMessage = "Second email address entry required";
    	$("email_address2").focus();
     else if (emailAddress2 != emailAddress1) 
    	errorMessage = "Email address entries must match";
    	$("email_address2").focus();
     else if (firstName == "") 
    	errorMessage = "First name entry required";
    	$("first_name").focus();
    

    // submit the form if all entries are valid
    // otherwise, display an error message
    if (errorMessage = "") 
        $("email_form").submit(); 
     else 
    	alert(errorMessage);
    
;

window.onload = function() 
    $("join_list").onclick = joinList;
    $("email_address1").focus();
;
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">	
    <title> Join Email List</title>
    <link rel="stylesheet" href="email_list.css">
    <script src="email_list.js"></script>
</head>
<body>
    <main>
        <h1>Please join our email list</h1>
        <form id="email_form" name="email_form" action="join.html" method="get">
            <label for="email_address1">Email Address:</label>
            <input type="text" id="email_address1" name="email_address1"><br>

            <label for="email_address2">Re-enter Email Address:</label>
            <input type="text" id="email_address2" name="email_address2"><br>

            <label for="first_name">First Name</label>
            <input type="text" id="first_name" name="first_name"><br>

            <label>&nbsp;</label>
            <input type="button" id="join_list" value="Join our List">
        </form>
    </main>
</body>
</html>

**

答案

因此,在您不进行比较的代码中有拼写错误,您将变量设置为空字符串。而空字符串是falsy value

所以你的代码基本上就是这个

errorMessage = "";
if (errorMessage) 
 else 

使用jshint,jslint,eslint等工具构建到IDE中将帮助您捕获这些拼写错误。因此,请更改代码以进行正确的比较。

if (errorMessage === "") 
另一答案

我不确定你是否可以通过这种方式从输入中提取值。 email_address1是元素id,所以你必须在开头用hashtag引用它。在jQuery中正确执行此操作$(“#email_address1”)。val()

=,==和===之间的差异非常重要。

let testVariable = 123; // only assigns value to a variable

=和==之间的差异非常明显。在==和===之间有点复杂。

==运算符仅比较值,不识别数据类型,但===识别它们。这对你意味着什么?

可以说比你有变量testNumber,赋值123作为数字和变量textText,赋值为“123”(注意引号)。

如果将它们与==表达式进行比较则返回true,但如果将它们与===表达式进行比较则返回false。

let testNumber = 123;
let testText = "123";

正如您所看到的,变量testText是双引号,这意味着它的数据类型是String。字符串只是普通文本。但testNumber变量的数据类型为Integer。整数只是正常数字。这两个变量的内容没有区别,但数据类型却有所不同。

testNumber == testText //true - same content, different datatype we ignore that
testNumber === testTExt // false - same content, different datatype but now we consider it

我希望我至少帮助过你一点点。 :)

编辑:另外我建议您在chrome和check console中打开开发人员工具(F12)。你可以在那里看到错误。它可以帮助你很多。

以上是关于JavaScript - 简单数据验证中的错误逻辑的主要内容,如果未能解决你的问题,请参考以下文章

检查/验证javascript语法的简单方法

JavaScript 或 jQuery 中的 HTML 表单验证逻辑

N 层服务层验证显示表示层中的业务逻辑错误

在 JavaScript 中提交时值的长度验证错误 [关闭]

即使使用相同的数据,Keras 训练和验证指标值也不同(逻辑回归)

如何验证下拉列表中的“其他”选项?