JavaScript:基础表单验证

简介:

在用户填写表单的过程之中,往往需要编写一堆的验证操作,这样就可以保证提交的数据时正确的。那么下面就模拟表单验证的处理操作完成。

如果要想进行验证,首先针对于输入的数据来进行一个验证处理。

 

1、定义一个基础的表单(从标准来讲每一个元素都一定要存在有一个ID属性)

  <form action="pass.html" method="post" id="loginForm">

    <!--在以后的开发过程之中,必须要保证id与name属性内容完全一致,否则会出现怪异问题-->

      登录邮箱:<input type="text" name="email" id="email"></input><br>

    <button type="submit" id="subBtn">登录</button>

  </form>

范例:

pass.html

复制代码
<!doctype html>
<html lang="zh-CN">
    <head>
        <meta charset="utf-8">
        <meta name="description" content=event.html"">
        <meta name="keywords" content="event,html,js">

    <body>
        <h1>表单验证通过!</h1>
    </body>
</html>
复制代码

form.html

复制代码
<!doctype html>
<html lang="zh-CN">
    <head>
        <meta charset="utf-8">
        <meta name="description" content=event.html"">
        <meta name="keywords" content="event,html,js">
        <title>javascript的程序开发之表单提交事件处理</title>
        <script type="text/javascript" src="form.js"></script>
    </head>
    <body>
        <form action="pass.html" method="post" id="loginForm">
            <!--在以后的开发过程之中,必须要保证id与name属性内容完全一致,否则会出现怪异问题-->
            登录邮箱:<input type="text" name="email" id="email"></input><br>
            <button type="submit" id="subBtn">登录</button>
        </form>
    </body>
</html>
复制代码

加载页面时:

点击登录时:

2、随后就需要对于表单的数据进行验证。这个过程应该在form.js文件里完成。

     *现在习惯性的做法是直接找到登录按钮进行验证

范例:

form.html

复制代码
<!doctype html>
<html lang="zh-CN">
    <head>
        <meta charset="utf-8">
        <meta name="description" content=event.html"">
        <meta name="keywords" content="event,html,js">
        <title>javascript的程序开发之表单提交事件处理</title>
        <script type="text/javascript" src="form.js"></script>
    </head>
    <body>
        <form action="pass.html" method="post" id="loginForm">
            <!--在以后的开发过程之中,必须要保证id与name属性内容完全一致,否则会出现怪异问题-->
            登录邮箱:<input type="text" name="email" id="email"></input><br>
            <button type="submit" id="subBtn">登录</button>
        </form>
    </body>
</html>
复制代码

 form.js

复制代码
window.onload = function(){  //在页面加载之后动态事件绑定

    //找到按钮元素对象并增加一个提交表单事件
    document.getElementById('subBtn').addEventListener("submit",function(){
        //找到邮件元素对象
        var emailObj = document.getElementById("email");
        //取出它的值
        alert(emailObj.value);
        if (emailObj.value == "") {
            alert("您还有输入登录邮箱,无法登录!");
        }else{
            this.submit(); //当前元素提交表单
        }
    },false);
}
复制代码

 内容为空时:

内容不为空时:

发现:不管内容是否为空,只要点击了确定,表单就通过了,然而,这是不对的:

 

3、以上的代码只是说可以取得了最简单的验证处理,但是返现表单是不能够进行有效的拦截的,应为如果要想拦截表单,需要的是onsubmit事件,这个事件的特点是如果返回了false,那么就不提交表单,如果返回的是true,表示的是提交表单。

function f () {

  return false;

}

<form action="pass.html" method="post" id="loginForm" onsubmit="return f()">

  <!--在以后的开发过程之中,必须要保证id与name属性内容完全一致,否则会出现怪异问题-->

  登录邮箱:<input type="text" name="email" id="email"></input><br>

  <button type="submit" id="subBtn">登录</button>

</form>

  此时<form>元素中的onsubmit="return f()”表示将接收f()函数返回的结果,如果此函数返回的是true,表单正常提交,反之,表单不提交。但是这个代码不能够使用。

  因为这种操作属于静态的事件绑定处理,不能够用静态,只能通过动态事件绑定处理,在动态事件的验证中,如果要想控制表单的提交,在表单上设置submit事件,而后利用“表单对象.submit()”函数手工提交表单。也即将提交表单的操作交给from,而不是由button去控制。

范例:

form.html

复制代码
<!doctype html>
<html lang="zh-CN">
    <head>
        <meta charset="utf-8">
        <meta name="description" content=event.html"">
        <meta name="keywords" content="event,html,js">
        <title>javascript的程序开发之表单提交事件处理</title>
        <script type="text/javascript" src="form.js"></script>
    </head>
    <body>
        <form action="pass.html" method="post" id="loginForm" onsubmit="return f()">
            <!--在以后的开发过程之中,必须要保证id与name属性内容完全一致,否则会出现怪异问题-->
            登录邮箱:<input type="text" name="email" id="email"></input><br>
            <button type="submit" id="subBtn">登录</button>
        </form>
    </body>
</html>
复制代码

form.js

复制代码
window.onload = function(){  //在页面加载之后动态事件绑定

    //找到表单元素对象并增加一个提交表单事件
    document.getElementById('loginForm').addEventListener("submit",function(){
        //找到邮件元素对象
        var emailObj = document.getElementById("email");
        //取出它的值
        // alert(emailObj.value);
        if (emailObj.value == "") {
            alert("您还有输入登录邮箱,无法登录!");
        }else{  //输入正确,理论上应该可以进行提交
            alert(emailObj.value);
            this.submit(); //当前元素提交表单
        }
    },false);
}
function f () {
    return false;
}
复制代码

内容为空时:

内容不为空时:

发现:内容必须存在,点击确定,表单才会通过,这才是正确的逻辑:

 

  但是这个验证并不标准,因为此时输入的是email数据吗?不能用简单的空字符串来描述,而应该用正则表达式来计算,那么在JavaScript中正则应用语法:”/^正则标记$/.test(数据)“。

范例:

form.js

复制代码
window.onload = function(){  //在页面加载之后动态事件绑定

    //找到表单元素对象并增加一个提交表单事件
    document.getElementById('loginForm').addEventListener("submit",function(){
        //找到邮件元素对象
        var emailObj = document.getElementById("email");
        //取出它的值
        // alert(emailObj.value);
        if (emailObj.value == "") {
            alert("您还有输入登录邮箱,无法登录!");
        }else{  //输入正确,理论上应该可以进行提交
            alert(emailObj.value);
            if (/^\w+@\w+\.\w+$/.test(emailObj.value)) {
                this.submit(); //当前元素提交表单
            }else{  //验证不通过
                alert("请输入合法的EMAIL地址!");
            }
        }
    },false);
}
function f () {
    return false;
}
复制代码

内容为空时:

内容不为空时,但不是邮箱格式时:

内容不为空时,是邮箱格式时:

发现:内容必须存在,而且邮箱格式必须正确,点击确定,表单才会通过:

 

  在整个的submit事件处理中,有一点是非常麻烦的,如果直接在”<form>“元素上使用”onsubmit“事件处理,那么只需要利用”return true|false返回的函数“,那么就可以拦截操作。可是如果是动态事件绑定,那么将无法拦截。

  对于”addEventListener(事件类型,事件处理函数,冒泡处理)函数“,如果按照这样的思路,要去解决当前的拦截问题,那么就必须阻止事件向下进行。

 

准确的完整代码范例:

pass.html

复制代码
<!doctype html>
<html lang="zh-CN">
    <head>
        <meta charset="utf-8">
        <meta name="description" content=event.html"">
        <meta name="keywords" content="event,html,js">

    <body>
        <h1>表单验证通过!</h1>
    </body>
</html>
复制代码

form.html

复制代码
<!doctype html>
<html lang="zh-CN">
    <head>
        <meta charset="utf-8">
        <meta name="description" content=event.html"">
        <meta name="keywords" content="event,html,js">
        <title>javascript的程序开发之表单提交事件处理</title>
        <script type="text/javascript" src="form.js"></script>
    </head>
    <body>
        <form action="pass.html" method="post" id="loginForm">
            <!--在以后的开发过程之中,必须要保证id与name属性内容完全一致,否则会出现怪异问题-->
            登录邮箱:<input type="text" name="email" id="email"></input><br>
            <button type="submit" id="subBtn">登录</button>
        </form>
    </body>
</html>
复制代码

form.js

复制代码
window.onload = function(){  //在页面加载之后动态事件绑定

    //找到表单元素对象并增加一个提交表单事件
    document.getElementById('loginForm').addEventListener("submit",function(e){ //e是提交事件
        console.log(e); //控制台可以打印出当前执行的事件

        //找到邮件元素对象
        var emailObj = document.getElementById("email");

        //取出它的值
        // alert(emailObj.value);
        if (emailObj.value == "") {
            alert("您还有输入登录邮箱,无法登录!");
            if (e && e.preventDefault) { //现在是在W3C标准下执行
                e.preventDefault(); //阻止浏览器的动作
            }else{  //专门针对于IE浏览器的处理
                window.event.returnValue= false;
            }
        }else{  //输入正确,理论上应该可以进行提交
            alert(emailObj.value);

            if (/^\w+@\w+\.\w+$/.test(emailObj.value)) {
                this.submit(); //当前元素提交表单
            }else{  //验证不通过
                alert("请输入合法的EMAIL地址!");
                if (e && e.preventDefault) { //现在是在W3C标准下执行
                e.preventDefault(); //阻止浏览器的动作
                }else{  //专门针对于IE浏览器的处理
                    window.event.returnValue= false;
                }
            }
        }
    },false);
}
function submit () {
    return false;
}
复制代码

  这种对提交表单的验证方式算是比较完善的了,而且对浏览器进行了兼容,不过这种代码没有通用性。

程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式!
本文转自当天真遇到现实博客园博客,原文链接:http://www.cnblogs.com/XYQ-208910/p/5826942.html ,如需转载请自行联系原作者
相关文章
|
移动开发 运维 供应链
通过array.some()实现权限检查、表单验证、库存管理、内容审查和数据处理;js数组元素检查的方法,some()的使用详解,array.some与array.every的区别(附实际应用代码)
array.some()可以用来权限检查、表单验证、库存管理、内容审查和数据处理等数据校验工作,核心在于利用其短路机制,速度更快,节约性能。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
ractive.js联系表单动画效果源码
一款ractive.js联系表单动画效果,很有创意的发送邮件、联系内容等表单,基于ractive.js实现的动画效果,以发送信件的方式。
185 1
|
前端开发 JavaScript 安全
HTML+CSS+JS密码灯登录表单
通过结合使用HTML、CSS和JavaScript,我们创建了一个带有密码强度指示器的登录表单。这不仅提高了用户体验,还帮助用户创建更安全的密码。希望本文的详细介绍和代码示例能帮助您在实际项目中实现类似功能,提升网站的安全性和用户友好性。
432 3
|
JavaScript 数据安全/隐私保护
2024了,你会使用原生js批量获取表单数据吗
2024了,你会使用原生js批量获取表单数据吗
344 4
|
JavaScript 前端开发 数据安全/隐私保护
前端技术分享:使用Vue.js构建响应式表单
【10月更文挑战第1天】前端技术分享:使用Vue.js构建响应式表单
|
移动开发 前端开发 JavaScript
JavaScript 表单
JavaScript 表单
126 9
|
JavaScript 前端开发
JavaScript 表单验证
JavaScript 表单验证
137 9
|
移动开发 JavaScript 前端开发
js之操作表单 | 12-4
js之操作表单 | 12-4
|
前端开发 微服务 API
微服务浪潮下的JSF革新:如何在分散式架构中构建统一而强大的Web界面
【8月更文挑战第31天】随着微服务架构的兴起,企业将应用拆分成小型、独立的服务以提高系统可维护性和可扩展性。本文探讨如何在微服务架构下构建和部署JavaServer Faces (JSF) 应用,通过RESTful服务实现前后端分离,提升灵活性和适应性。
353 1
|
JavaScript 安全 数据安全/隐私保护
深入Node.js与Express:从表单接收到数据验证的完整指南——实战技巧揭秘后端开发中的表单处理流程
【8月更文挑战第31天】在Web开发中,处理表单数据至关重要。本文通过实例详细讲解了如何利用Node.js与Express框架接收和验证表单数据。首先,搭建环境并初始化一个简单的Express应用;接着,演示如何接收用户注册表单中的`username`和`email`字段;最后,引入`joi`模块进行数据验证,确保数据安全准确。掌握这些技能有助于开发者构建更安全、友好的Web应用。随着Node.js和Express的不断进步,未来将有更多高级功能值得期待。
562 1

热门文章

最新文章