JavaScript.表单验证

1.先理解表单验证再实现表单验证

2.二级联动

表单验证:是对网页登录界面输入框的内容进行约束和判断

实现简单的表单验证

<span>无效果标签

<body>
<!--<form action="" onsubmit="return check()">-->  //向表单中添加提交事件
<form action="" id="myForm">
    <p>名字: <input type="text" id="userName" ><span id="l1"></span></p>  //定义三个输入框
    <p>密码: <input type="text" id="userPwd" ><span id="l2"></span></p>
    <p>邮箱: <input type="text" id="userEmail" ><span id="l3"></span></p>
    <p>
        <button>登录</button>
    </p>
</form>
<script>
myForm=()=>{
var s1=userName.Value    //拿到输入框的值
var s2=userPwd.Value
var s3=userEmail.Value
var f=ture
if(s1.length==0){    //拿到长度length
l1.textContent="请输入正确的用户名"   //textContent设置标签里面的值
f=false
}
if(s1.length==0){
l2.textContent="请输入正确的密码"
f=false
}
if(s1.length==0){
l3.textContent="请输入正确的邮箱"
f=false
}
return  f
}
</script>
</body>

简单表格验证加强版

onkeyup  鼠标松开事件

运用了短路,短路只会提示第一个输入框

<body>
<form action="" id="myForm">
//onkeyup 鼠标松开事件
    <p>名字: <input type="text" id="userName" onkeyup="b1()"><span id="l1"></span></p>
    <p>密码: <input type="text" id="userPwd" onkeyup="b2()"><span id="l2"></span></p>
    <p>邮箱: <input type="text" id="userEmail" onkeyup="b3()"><span id="l3"></span></p>
    <p>
        <button>登录</button>
    </p>
</form>
<script>
function b1(){
var length=userName.length  //拿长度
if(length>0){
if(length>=3&&length<6){   //if判断
l1.textContent="输入完成"
return ture
}
l1.textContent="请输入3-6位"
return false
}
l1.textContent="请输入用户名"
return false
}
function b2(){
var length=userPwd.length
if(length>0){
if(length>=3&&length<6){
l2.textContent="输入完成"
return ture
}
l2.textContent="请输入3-6位"
return false
}
l2.textContent="请输入密码"
return false
}
function b3(){
var length=userEmail.length
if(length>0){
if(length>=3&&length<6){
l3.textContent="输入完成"
return ture
}
l3.textContent="请输入3-6位"
return false
}
l3.textContent="请输入邮箱"
return false
}
//提交事件判断
myForm.onsubmit=()=>{
return  b1()&&b2()&&b3();   //短路&&遇false就返
}
</script>
<body>

由于代码过于冗长,实现最终版表格验证

学会将多个方法运用一个方法实现效果

运用将返回结果赋值的方法避免短路

<body>
<form action="" id="myForm">
//将多个方法用一个实现  设class运用class选择器
    <p>名字: <input type="text" id="userName" onkeyup="checkLabel(this)"><span><i class="error"></i></span></p>
    <p>密码: <input type="text" id="userPwd" onkeyup="checkLabel(this)"><span><i class="error"></i></span></p>
    <p>邮箱: <input type="text" id="userEmail" onkeyup="checkLabel(this)"><span><i class="error"></i></span></p>
    <p>
        <button>登录</button>
    </p>
</form>
<script>

    //用来检查是否合规
    function checkLabel(obj) {
        var length = obj.value.length   //拿到文本框内容的长度
        // var label=obj.nextElementSibling   //obj的下一位
        var label = obj.parentElement.getElementsByClassName("error")[0]  //拿到obj的父级,再通过class选择器拿到i标签
        if (length > 0) {//里面有内容
            //名字的大小应该在 3-6 之间
            if (length >= 3 && length <= 6) {
                label.textContent = "😊"
                return true
            }
            //不在区间之内
            label.textContent = "长度必须在3-6之间"
            return false
        }
        //里面没有内容
        label.textContent = "长度必须大于0"
        return false
    }
 myForm.onsubmit = () => {
        //阻止表单的提交  需要返回 false
        // return checkName()&&checkPwd()&&checkEmail()
        var f1 = checkLabel(userName)      //将返回结果赋值可以避免短路,实现三个输入框都出现提示
        var f2 = checkLabel(userEmail)
        var f3 = checkLabel(userPwd)
        return f1 && f2 && f3
    }
</script>
</body>

用正则来判断表单

正则语句必须填写在/^$/里面

学会正则语句的编写,熟练利用函数传参

<body>
<form action="" id="myForm">
//在鼠标松开事件中设置传三个参,自己,正则,提示语句(因为三个输入框正则判断不同,提示语句不同)
    <p>名字: <input type="text" id="userName" onkeyup="checkLabel(this,/^[a-zA-Z]{3,6}$/,'名字的长度在3-6')"><span><i class="error"></i></span></p>
    <p>密码: <input type="text" id="userPwd" onkeyup="checkLabel(this,/^\w{6,10}$/,'密码的长度在6-10')"><span><i class="error"></i></span></p>
    <p>邮箱: <input type="text" id="userEmail" onkeyup="checkLabel(this,/^\w+[.]\w+@\w+[.]\w+$/,'邮箱中必须包含@')"><span><i class="error"></i></span></p>
    <p>
        <button>登录</button>
    </p>
</form>
<script>

    //用来检查名字是否合规
    function checkLabel(obj,rex,tip) {  //编写函数传参
        var length = obj.value.length
        var label = obj.parentElement.getElementsByClassName("error")[0]
        if (length > 0) {//里面有内容
            //内容在正则匹配之间
            if (rex.test(obj.value)) {
                label.textContent = "😊"
                return true
            }
            //不在区间之内
            label.textContent = tip
            return false
        }
        //里面没有内容
        label.textContent = "长度必须大于0"
        return false
    }

    //添加提交事件(会具备返回值)
    myForm.onsubmit = () => {
        //阻止表单的提交  需要返回 false
        // return checkName()&&checkPwd()&&checkEmail()
        var f1 = checkLabel(userName)
        var f2 = checkLabel(userEmail)
        var f3 = checkLabel(userPwd)
        return f1 && f2 && f3
    }
</script>
</body>

利用正则对密码进行等级判断

学会利用正则进行等级判断,与表单联用

<body>
<input type="text" id="m1">
<span id="l1"></span>
<p>
    密码等级<span id="l2"></span>
</p>
<script>
    m1.onkeyup=function (){
        //长度必须在6-10之间
        var str=m1.value
        if(str!=""){
            //定义正则
            var r1=/^\w{6,10}$/
            // 数字 英文(小写 大写) .
            var r2=/^.*[a-z].*$/
            var r3=/^.*[A-Z].*$/
            var r4=/^.*\d.*$/
            //密码等级
            var dj=""
            //开始正则验证
            if(r1.test(str)){
                l1.textContent="O(∩_∩)O😄"
                if(r2.test(str))dj+="☆"
                if(r3.test(str))dj+="☆"
                if(r4.test(str))dj+="☆"
                l2.textContent=dj
                return
            }
            //不满足
            l1.textContent="不符合格式"
            return
        }
        l1.textContent="不能为空"
    }

</script>
</body>

二级联动的实现

<body>
<select id="province" onchange="myChange()"></select>
<select id="cities"></select>

<script>

    //数组怎么写?
    //类型不限制
    //长度不限制
    //数组可以是字符串
    var provinces=[]
    //城市
    provinces["日本省"]=["北海道","桥豆麻袋","摩西摩西"]
    provinces["湖南省"]=["长沙","北京","西八"]
    provinces["广西省"]=["表妹","螺蛳粉","表郭"]


    //省份怎么来
    //  for of 相当于foreach 遍历元素
    //  for in 遍历下标
    for(let i in provinces){
        //往省份的下拉框中添加选项
        //<option value="i">i</option>
        province.appendChild(new Option(i,i))
    }

    //城市里面放谁?
    function setCity(name) {
        for(let i of provinces[name]){
            cities.appendChild(new Option(i,i))
        }
    }

    setCity(province.value)

    function myChange() {
        //清空原来的选项
        cities.innerHTML=""
        //输入框 和 下拉框
        setCity(province.value)
    }
</script>
</body>

注:调用value的只有文本框和下拉框,其他的textContent

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值