Javascript:为什么我的输入验证不起作用?

Javascript:为什么我的输入验证不起作用?,javascript,Javascript,这是我正在进行的验证,但似乎无法正确进行。当我输入正确的pin码“12345”时,它工作正常,函数Done()显示警报“Well Done”。然而,我在引脚上输入了3次失败的尝试,它确实显示了一个错误,但是当错误发生后程序应该停止时,函数Done仍然激活。有什么解决办法吗 <head> <script> valid = false; function Start(valid) { check(valid

这是我正在进行的验证,但似乎无法正确进行。当我输入正确的pin码“12345”时,它工作正常,函数Done()显示警报“Well Done”。然而,我在引脚上输入了3次失败的尝试,它确实显示了一个错误,但是当错误发生后程序应该停止时,函数Done仍然激活。有什么解决办法吗

<head>
    <script>
        valid = false;

        function Start(valid) {


            check(valid);


            if (valid = true) {
                Done();
            }
            if (valid = false) {
                alert('End');
                return;
            }

        }

        function check(valid) {

            var PinNum;
            var Attempts = 0;


            while (Attempts < 3) {
                Attempts = (Attempts + 1);
                PinNum = prompt('Enter the pin number');

                if (PinNum == '12345') {
                    alert('Welcome!');
                    valid = true;
                    return valid;
                    return;
                } else {
                    alert('Wrong pin number, this is attemp ' + Attempts + ' of 3');
                }
            }
            alert('Too many failed attempts, giving up');
            return;
        }


        function Done() {
            alert("well done")
        }
    </script>
</head>

<body>
    <button onclick="Start()">Start</button>
</body>

</html>


有效=错误;
功能启动(有效){
支票(有效);
if(valid=true){
完成();
}
如果(有效=错误){
警报(“结束”);
返回;
}
}
功能检查(有效){
羽状变种;
var=0;
而(尝试次数<3次){
尝试次数=(尝试次数+1);
PinNum=提示(“输入pin编号”);
如果(羽片=='12345'){
警惕(“欢迎!”);
有效=真;
返回有效;
返回;
}否则{
警报('错误的pin码,这是尝试'+尝试+'共3次');
}
}
警报(“尝试失败太多,放弃”);
返回;
}
函数完成(){
警惕(“干得好”)
}
开始

if else
语句中,您将
true
赋值给
valid
,而不是比较它们。您可以将这些语句简化为:

var valid = false;

function Start() {
    check();

    if (valid) {
        Done();
    } else {
        alert('End');
    }
}

function check() {

    var PinNum;
    var Attempts = 0;

    while (Attempts < 3) {
        Attempts = (Attempts + 1);
        PinNum = prompt('Enter the pin number');

        if (PinNum == '12345') {
            alert('Welcome!');
            valid = true;
            return;
        } else {
            alert('Wrong pin number, this is attemp ' + Attempts + ' of 3');
        }
    }
    alert('Too many failed attempts, giving up');
    return;
}


function Done() {
    alert("well done")
}
var valid=false;
函数Start(){
检查();
如果(有效){
完成();
}否则{
警报(“结束”);
}
}
函数检查(){
羽状变种;
var=0;
而(尝试次数<3次){
尝试次数=(尝试次数+1);
PinNum=提示(“输入pin编号”);
如果(羽片=='12345'){
警惕(“欢迎!”);
有效=真;
返回;
}否则{
警报('错误的pin码,这是尝试'+尝试+'共3次');
}
}
警报(“尝试失败太多,放弃”);
返回;
}
函数完成(){
警惕(“干得好”)
}
有几项:

  • Start
    函数中的变量
    valid
    与函数外部定义的变量不同。每次单击按钮时,
    undefined
    将传递给函数。您应该仔细阅读JavaScript范围-

  • valid=true
    是一个赋值。单等号表示“分配给”,而双等号或三等号表示比较。您应该仔细阅读比较运算符-

  • 全局变量也被认为是不好的做法,所以最好避免使用
    有效的
    变量。这里有一个可能的解决方案-


  • 
    函数start(){
    如果(u是否有效()){
    完成();
    }否则{
    警报(“结束”);
    返回;
    }
    }
    函数是有效的(){
    羽状变种,
    尝试次数=0;
    而(尝试次数<3次){
    尝试次数=(尝试次数+1);
    PinNum=提示(“输入pin编号”);
    如果(羽片=='12345'){
    警惕(“欢迎!”);
    返回true;
    }否则{
    警报('错误的pin码,这是尝试'+尝试+'共3次');
    }
    }
    警报(“尝试失败太多,放弃”);
    返回false;
    }
    函数完成(){
    警惕(“干得好”)
    }
    开始
    
    使用调试器并调试您的代码您刚刚传递了
    valid
    作为参数,使其成为check函数的本地参数,因此在check函数内部更改
    valid
    不会影响函数外部的
    valid
    ,这是两个不同的变量。但我需要确保valid为true。使用您的方法,my function Done()不起作用。@user3746770,当
    valid==true
    时,
    if(valid)
    等同于
    if(true)
    。如果这还不能解决问题,还有其他原因problem@user3746770,我已经清理了你的代码。现在可以了。
    <!DOCTYPE html>
    <html>
    <head>
    <script>
    function start() {
        if (is_valid()) {
            Done();
        } else {
            alert('End');
            return;
        }
    }
    function is_valid() {
        var PinNum,
            Attempts = 0;
        while (Attempts < 3) {
            Attempts = (Attempts + 1);
            PinNum = prompt('Enter the pin number');
            if (PinNum == '12345') {
                alert('Welcome!');
                return true;
            } else {
                alert('Wrong pin number, this is attempt ' + Attempts + ' of 3');
            }
        }
        alert('Too many failed attempts, giving up');
        return false;
    }
    function Done() {
        alert("well done")
    }
    </script>
    </head>
    <body>
       <button onclick="start()">Start</button>
    </body>
    </html>