o365邮箱登录-365bet提款速度-外勤365官方网站

[原创]表单验证之return与return false

[原创]表单验证之return与return false

PS:最近渣渣在学JS 想找个实习来着 太渣没人要= = 马上大四了 吃枣药丸

在学习JS基础教程上的表单验证的例子时,发现了这个问题。

众所周知,使用return可以中止当前函数的运行,return其后的语句不再运行。但是对于表单提交,单单一个return却不够,下面我们来看一下,return和return false在表单提交的时候有什么区别。

下面的JS代码对原代码进行了修改,个人认为利于理解

//此例用于验证表单是否为空、密码是否一致

window.onload = initForm;function initForm(){ for(var i = 0; i < document.forms.length; i++) //遍历每一个表单 document.forms[i].onsubmit = validForm;}function validForm(){ var allTags = this.elements; //var tmp = ""; //用于记录密码(用于对密码的再输入校验) for(var i = 0; i < allTags.length; i++){ if(!validTag(allTags[i])) return false; /*if(allTags[i].type == "password"){ //输入为密码 if(tmp == "") tmp = allTags[i].value; else if(tmp != allTags[i].value){ addStyle(allTags[i]); return false; } else delStyle(allTags[i]); }*/ } return true;}

//这里仅考虑了文本框、下拉菜单的情况

function validTag(thisTag){

//非sumbit或者reset选项 if(thisTag.nodeName != "SUBMIT" && thisTag.nodeName != "RESET"){ if(thisTag.className.indexOf("reqd") > -1){ //必填字段

if(thisTag.value == "" || thisTag.value == " "){ //值为空或者空白

return addStyle(thisTag); //增加样式 } delStyle(thisTag); //删除样式 } } return true;}function addStyle(thisTag){ if(thisTag.parentNode.nodeName == "LABEL") thisTag.parentNode.className += " invalid" thisTag.className += " invalid"; thisTag.focus(); if(thisTag.nodeName == "INPUT") thisTag.select(); return false;}function delStyle(thisTag){ if(thisTag.className.indexOf("invalid") > -1) thisTag.className = thisTag.className.replace(" invalid", ""); if(thisTag.parentNode.className.indexOf("invalid") > -1) thisTag.parentNode.className = thisTag.className.replace(" invalid", "");}

代码不用多说,都能看懂,问题在于红色标注的return false。

那么首先把return false改为return吧,这里函数也没要求返回参数不是?那就用return就够了,我刚开始就是这么想的。

这是需要验证的页面,很简单的一个用户名、密码还有个确认密码(无视即可)

赶紧就这么空白提交试试

阿里?哪里不对啊,注意地址栏显示?#(如下图),我的表单的默认提交地址就是#,因此可以得出此时表单已经提交,而且对于未通过验证的单元,我加了样式,背景色红色。

细心的人可能发现:上图的GIF动画中,表单的用户名(Your Name)确实被标记成红色,但是一闪就没了,成为了提交表单。

经过一番研究(百度啊,坐椅子上转圈啊等),才得知return虽然中止了对表单元素的验证,但是并未阻止表单的提交,相当于前功尽弃。

在表单提交之中,return和return false的区别就在于此(转了一下午椅子总算学点东西ORZ)

那么还不快改为return false试试

这下点击submit之后,正常了吧~

相关推荐
十大java应用服务器(web server)总结
365bet提款速度

十大java应用服务器(web server)总结

📅 07-11 🔥 794
肾切除术(肾脏切除)
o365邮箱登录

肾切除术(肾脏切除)

📅 07-27 🔥 995
《原神》绯红玉髓全部位置在哪
外勤365官方网站

《原神》绯红玉髓全部位置在哪

📅 08-14 🔥 781
网络代理评测,了解最好的网络代理工具
365bet提款速度

网络代理评测,了解最好的网络代理工具

📅 07-17 🔥 787
营业推广方案
o365邮箱登录

营业推广方案

📅 08-11 🔥 282