关于提交表单验证

来源:3-10 作业题

wsc6016922

2020-08-01 13:59:27

老师我是这么写的,以用户名这一项为例

//记录用户输入是否正确,默认为false
var test1 = false,
    test2 = false,
    test3 = false,
    test4 = false,
    test5 = false,
    test6 = false,
    test7 = false;


//账户信息验证模板
//参数:1用户输入的值   2.提示  3.内容为空时的错误提示  
// 4.正则表达式    5.输入的内容错误时的提示    6.输入的内容正确时的提示    7.记录用户输入是否正确
function registerCheck(inputValue, tips, errorEmpty, pattern, errorInput, rightInput, testNum) {
    if (!inputValue) {
        tips.innerHTML = errorEmpty;
        tips.style.color = 'red';
    } else {
        var patt = pattern;
        if (!(pattern.exec(inputValue))) {
            tips.innerHTML = errorInput;
            tips.style.color = 'red';
            return testNum = false;
        } else {
            tips.innerHTML = rightInput;
            tips.style.color = 'green';
            return testNum = true;
        }
    }
}

//用户名验证
userName.onblur = function() {
    registerCheck(userName.value, spans[0], "6-30位字母、数字或'_',字母开头", /^[a-zA-Z]\w{5,29}$/, "6-30位字母、数字或'_',字母开头", '用户名输入正确', test1);
    console.log(test1);
}

当我正确的输入用户名时,我debugger了一下,发现testNum也能返回true,如图:

http://img.mukewang.com/climg/5f25046d0962b07b04410280.jpg

但是我console.log(test1)却显示为false,老师这是为什么?

写回答

1回答

好帮手慕久久

2020-08-01

同学你好,是这样的,主要原因就是test1是基本数据类型,具体如下:在registerCheck方法中,testNum是形参,当调用registerCheck方法时,把test1传进去,相当于给形参testNum赋值,然后在return语句中,改变testNum的值,但是由于test1是基本数据类型,不是引用类型,所以对形参testNum的改变,不会同步给test1,因此testNum的值变成true后,test1还是false。

可以将test1放在数组中,然后直接操作该数组,如下:

http://img.mukewang.com/climg/5f252da00962db8104730080.jpg

http://img.mukewang.com/climg/5f252da509fc83fb31010273.jpghttp://img.mukewang.com/climg/5f252da90910fa6210150450.jpg

如果我的回答帮到了你,欢迎采纳,祝学习愉快!

1

0 学习 · 14456 问题

查看课程