关于提交表单验证
来源: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,如图:
但是我console.log(test1)却显示为false,老师这是为什么?
1回答
同学你好,是这样的,主要原因就是test1是基本数据类型,具体如下:在registerCheck方法中,testNum是形参,当调用registerCheck方法时,把test1传进去,相当于给形参testNum赋值,然后在return语句中,改变testNum的值,但是由于test1是基本数据类型,不是引用类型,所以对形参testNum的改变,不会同步给test1,因此testNum的值变成true后,test1还是false。
可以将test1放在数组中,然后直接操作该数组,如下:
如果我的回答帮到了你,欢迎采纳,祝学习愉快!
相似问题