用prototype实现前台表单的验证(无刷新验证用户名,email,验证码等)

前端表单验证的五阶段演进:从面条代码到可配置体系 表单验证是前端开发中最基础也最易被低估的核心能力,其本质是将业务规则转化为可执行、可测试、可维护的客户端约束逻辑。从原始的if-else校验,到正则匹配、函数封装、链式编排、DOM属性驱动,最终走向数据驱动的可配置验证体系,这一过程深刻体现了前端工程化演进的典型路径。其中,可维护性与可配置性成为支撑多语言、灰度发布、快速迭代的关键技术价值。在电商、金融、ERP等复杂表单场景中,合理的验证架构不仅能提升用户填写体验与提交成功率,更能显著降低跨角色协作成本——本文聚焦于真实项目中沉淀出的五阶段实践模型,涵盖配置 阅读详情
最近发现使用prototype来做表单的前台验证感觉非常不错,prototype.js 是由 Sam Stephenson 写的一个 javascript 类库。这个构思奇妙,而且兼容标准的类库,能帮助你轻松建立有高度互动的 Web 2.0 特性的富客户端页面。下面是一个使用它做前台表单验证的例子。

var flag=[true,true,true,true,true,true,true,true,true,true];
       var userNameInfo=["用户名不能为空","用户名必须为6~20位","用户已存在","恭喜用户名可以使用"];
       var passwordInfo=["密码不能为空","密码长度不能小于6位","请再次输入密码","两次密码输入不一致,请重新输入"];
       function changeImage()
    {
    var timenow=new Date().getTime();
          $('checkcode').src = "image/loading.gif";
          $('checkcode').src = "random.jsp?d="+timenow;
       }
       function checkUserName()
    {
    if ($F("userName").match(/^/s*$/g)) {
           $("userNameErr").innerHTML =userNameInfo[0];
     flag[0]=false;
      }else{
  
    var re=/^(/w){6,20}$/;
    var tt = re.test($F("userName"));
    if(tt==false){
   $("userNameErr").innerHTML = userNameInfo[1];
   flag[0]=false;
       }else{
     $("userNameErr").innerHTML = "<img src='image/loading.gif'>";
       isExsitUsername(); 
   }
    }
   }
    function checkPassword()
    {
     
    if ($F("password").match(/^/s*$/g)) {
           $("pwdErr").innerHTML =passwordInfo[0];
           flag[1]=false;
  }else if($F("password").length<6){
      $("pwdErr").innerHTML=passwordInfo[1];
      flag[1]=false;
  }else{
      $("pwdErr").innerHTML="";
      flag[1]=true;
  }
  
    }
    function checkRePassword(){
      if ($F("password2").match(/^/s*$/g)) {
          $("repwdErr").innerHTML =passwordInfo[2];
          flag[2]=false;
  }else if($F("password2")!=$F("password")){
   $("repwdErr").innerHTML=passwordInfo[3]; 
   flag[2]=false; 
   }else{
      $("repwdErr").innerHTML="";
      flag[2]=true;
   }
    }
    function checkName(){
       if($F("name").match(/^/s*$/g)){
      $("nameErr").innerHTML="昵称不能为空";
      flag[3]=false;
    }else{
     $("nameErr").innerHTML="";
     flag[3]=true;
    }
    }
    function checkQuestion(){
       if($F("question").match(/^/s*$/g)){
          $("questionErr").innerHTML="请选择一个安全问题";
          flag[4]=false;
       }else{
          $("questionErr").innerHTML="";
          flag[4]=true;
       }
    }
    function checkAnswer(){
      if($F("answer").match(/^/s*$/g)){
         $("answerErr").innerHTML="安全回答不能为空";
         flag[5]=false;
      }else if($F("answer").length<4){
         $("answerErr").innerHTML="安全回答问题不能少于4个字符";
         flag[5]=false;
      }else{
          $("answerErr").innerHTML="";
         flag[5]=true;
      }
    }
    function checkEmail()
    {
     var reEmail =/(/S)+[@]{1}(/S)+[.]{1}(/w)+/;
      if($F("email").match(/^/s*$/g)){
         $("emailErr").innerHTML="Email不能为空";
         flag[6]=false;
      }else{
           var temp=reEmail.test($("email").value);
           if(temp==false){
             $("emailErr").innerHTML= "Email必须符合要求!";
                flag[6]=false;
              }else{
                $("emailErr").innerHTML="<img src='image/loading.gif'>";
                             isExsitEmail();
             
              }
         }

    }
    function checkMobile(){
    var patrn=/^(?:13/d|15[89])-?/d{5}(/d{3}|/*{3})$/;
    if($F("mobile").match(/^/s*$/g)){
         $("mobileErr").innerHTML="";
      flag[7]=true;
    }else{
      if (!patrn.test($F("mobile"))) {
         $("mobileErr").innerHTML="请输入正确的手机号码";
         flag[7]=false;
      }else{
        $("mobileErr").innerHTML="";
        flag[7]=true;
      }
      
    }  
      
   }
   function checkPID(){
     var patrn=/(^/d{15}$)|(^/d{17}([0-9]|X|x)$)/;
     if($F("PID").match(/^/s*$/g)){
       $("PIDErr").innerHTML="";
       flag[8]=true;
     }else{
      if (!patrn.test($F("PID")))  
         {
         $("PIDErr").innerHTML="身份证号码有误!";
         flag[8]=false;
      }else{
       $("PIDErr").innerHTML="";
       flag[8]=true;
    }
   }
       
    }
   
  function isExsitUsername(){
     var username=$F("userName");
     var url='user_checkUsername.do';
     var pars="username="+username;
     var usernameAjax=new Ajax.Request(
       url,
       {method:'get',parameters:pars,onComplete:showUResult}
       );
  }
  function showUResult(result){
  
       if(result.responseText.indexOf("true")!=-1){
          
          $("userNameErr").innerHTML=userNameInfo[2];
          flag[0]=false;
       }else{
          $("userNameErr").innerHTML="<font color='green'>"+userNameInfo[3]+"</font>";
          flag[0]=true;
       }
  }
  function isExsitEmail(){
     var email=$F("email");
     var url='user_checkEmail.do';
     pars="email="+email;
     var emailAjax=new Ajax.Request(
        url,
        {method:'get',parameters:pars,onComplete:showEResult}
        );
  }
  function showEResult(result){
   if(result.responseText.indexOf("true")!=-1){
       $("emailErr").innerHTML="这个Email已经有人使用,请换一个";
       flag[6]=false;
   }else{
       $("emailErr").innerHTML="<font color='green'>已通过验证</font>";
       flag[6]=true;
   }
  }
  function checkCode(){
      if($("code").value.match(/^/s*$/g)){
         $("codeErr").innerHTML="验证码不能为空";
         flag[9]=false;
    }else{
      isCorrectCode();
    }
    }
  function isCorrectCode(){
     var code=$F("code");
     var url='checkcode.jsp';
     pars="code="+code+"&ram="+Math.random();
     var codeAjax=new Ajax.Request(
     url,
     {method:'get',parameters:pars,asynchronous:false,onComplete:showCResult}
     );
    
  }
  function showCResult(result){
     if(result.responseText.indexOf("validate_successful")!=-1){
       $("codeErr").innerHTML="";
       flag[9]=true;
     }else{
       $("codeErr").innerHTML="错误的验证码";
       flag[9]=false;
     }
  }
 function checkform(){
      checkUserName();
      checkPassword();
      checkRePassword();
      checkName();
      checkQuestion();
      checkAnswer();
      checkEmail();
      checkMobile();
      checkPID();
      checkCode();
      for(var i=0;i<flag.length;i+=1){
        if(flag[i]==false)
          return false;
     }
     return true;
     
   }
其中

$(): 函数是在 DOM 中使用过于频繁的 document.getElementById() 方法的一个便利的简写,就像这个 DOM 方法一样,这个方法返回参数传入的 id 的那个元素。
$F() :函数是另一个大收欢迎的“快捷键”,它能用于返回任何表单输入控件的值,比如文本框或者下拉列表。这个方法也能用元素 id 或元素本身做为参数。
Ajax.Request 类:如果你不使用任何的帮助程序包,你很可能编写了整个大量的代码来创建 XMLHttpRequest 对象并且异步的跟踪它的进程,然后解析响应并处理它。当你不需要支持多于一种类型的浏览器时你会感到非常的幸运,反之你就要考虑使用prototype的Ajax.Request类。你也许注意到了在使用它做无刷新验证用户名,Email以及验证码时,使用'get'方法把参数传递给url,后面都带有一个参数,这个参数值是当前系统时间或是一个随机参数的一个数,这样做是为了避免浏览器的从它的缓存中读取响应信息,影响结果的正确性。

 
OpenWPM实战:监控JavaScript API调用,追踪敏感数据流与隐私泄露 JavaScript API是Web应用与浏览器环境交互的核心接口,涵盖了从DOM操作、网络请求到本地存储等关键功能。其调用监控技术,通常通过代码插桩(Instrumentation)或调试协议(如Chrome DevTools Protocol)实现,能够无侵入地记录函数执行、参数传递及返回值。这项技术的核心价值在于提升Web应用的可观测性与安全性,尤其在数据隐私合规、恶意行为检测和第三方脚本审计等场景中至关重要。例如,通过监控document.cookie或localStorage的访问,可以追踪用户凭 阅读详情

相关推荐

jquery实现无刷新验证码(java)

jquery实现无刷新验证码,绝对可以用!!! jquery实现无刷新验证码,绝对可以用!!! jquery实现无刷新验证码,绝对可以用!!!

JavaScript 函数,面向对象?

这样,我们使用一个对象来存储校验的一些方法,使用 checkForm.checkName() 就行,可以作为一个通用的方法(公共方法),不单单是登录,任何需要用到校验的地方都可以引入使用,但是又有问题,若当前不满足时,动态的添加一个 checkForm.checkPhone = function () { // todo: } 这样会影响到全局,因为是同一个对象来的🤣 下面这种方式也同样会面临这种问题。这样写,当然,功能是实现了,但是这样不外乎会在内存中多开辟了不必要的空间,我们实际上可以这样来写。

junhuafly的专栏 509

AJAX和WebService实现邮箱验证(无刷新验证邮件地址是否合法)

首先在项目里面添加服务引用 —————————验证 Email 地址是否正确.aspx—————– 代码如下: <html xmlns=”http://www.w3.org/1999/xhtml”> <head runat=”server”> <title></title> </head> <body> <form id=”form1″ runat=”server”> <asp ID=”ScriptManager1″ runat=”server”> </asp> <asp:UpdatePanel ID=”UpdatePanel1″ ru

使用ajax实现无刷新邮箱验证码,AJAX和WebService实现邮箱验证(无刷新)

首先在项目里面添加服务引用---------------------------验证 Email 地址是否正确.aspx------------------------------Emailrunat="server" Text="">--------------------------------------验证 Email 地址是否正确.aspx.cs------------------...

weixin_39996496的博客 774

ajax无刷新验证注册信息示例

ajax无刷新验证注册信息示例,其大概思路如下: 一.把注册的html页面做好(html+css) 1.不需要form表单,直接用div包着 2.需要四个标签来显示正确、错误的信息显示 3.不用submit提交按钮,直接用button 如图:   二.把ajax做成一个函数,通过传简单的参数可以与服务器进行数据交换. 1.这个ajax函数前面有一篇如何处理利用ajax处理返回数据的文章中详细说明了。 2.ajax函数需要三个参数,url,jsonData,getMsg。这里的url都是regProcess.php,jsonData则是要传到服务器验证的数据,getMsg就是

jsp+ajax实现无刷新(鼠标离开文本框即验证用户名)实现思路

jsp+ajax实现无刷新,鼠标离开文本框即验证用户名,很方便的功能,感兴趣的朋友可以了解下,或许对你学习ajax无刷新有所帮助

html验证邮箱自动,jquery无刷新验证邮箱地址实现实例

今天在开发的时候。需要在一个用户验证邮箱。但是使用了传统的js无刷新需要清空浏览器缓存后才能正常的验证所以自己就去用jquery 去写一个了无刷新验证 看看var ee;function mailbox(strEmail){var name=document.blooger[0].email.value;$.ajax({type: "get",url: "mail.php",data: "you...

weixin_39965283的博客 192

jquery无刷新验证邮箱地址实现实例

今天在开发的时候。需要在一个用户验证邮箱。但是使用了传统的js无刷新需要清空浏览器缓存后才能正常的验证所以自己就去用jquery 去写一个了无刷新验证 看看 代码如下:[removed]var ee;function  mailbox(strEmail){var name=document.blooger[0].email.value;$.ajax({ type: “get”, url: “<?php echo “http://”.$_SERVER[‘HTTP_HOST’].”/Login/”; ?>mail.php”, data: “youx=”

利用ajax无刷新验证注册信息

其大概思路如下: 一.把注册的html页面做好(html+css) 1.不需要form表单,直接用div包着 2.需要四个标签来显示正确、错误的信息显示 3.不用submit提交按钮,直接用button 如图: 二.把ajax做成一个函数,通过传简单的参数可以与服务器进行数据交换. 1.这个ajax函数前面有一篇如何处理利用ajax处理返回数据的文章中详细说明了。 2.ajax函

_ACME_的博客 9815

用PyTorch实战清华SSVEP数据集:手把手教你搭建第一个脑机接口分类模型(附完整代码)

本文详细介绍了如何使用PyTorch实战清华大学SSVEP数据集,从数据预处理到CNN模型构建的全流程。通过手把手教学,帮助读者搭建第一个脑机接口分类模型,特别针对数据维度转换等关键难点提供可视化解析,并附完整代码实现。

weixin_42566121的博客 352

MDM主数据清洗和编码集成说明

绝大多数的企业业务系统是伴随业务发展而建设的,但随着业务发展单一系统难以支撑企业业务闭环。MDM主数据管理平台可以满足企业数据治理的需求,本文针对主数据清洗和编码集成进行梳理。...

数通畅联 3320

【课程设计】NodeJS人才招聘系统-计算机毕业设计源码68224

1.首页:普通用户可以查看网站的最新动态和重要信息。此页面通常包含快速链接到其他关键部分,如招聘信息、留言反馈和个人中心。 2.通知公告:在此板块,普通用户能够获取最新的官方通知与公告信息,了解网站更新内容或重要事项的变化情况。 3.招聘资讯: 用户可浏览最新的招聘资讯,对感兴趣的文章进行点赞、收藏,并留下自己的看法或疑问。此外,还可以直接申请感兴趣的职位,系统会记录用户的申请历史以便日后参考。 4.留言反馈:此功能允许用户向网站管理员或其他相关部门提交建议、疑问或反馈,促进平台的改进和服务质量的提升。 5

Biye_Design的博客 1699

汽车测试工程师工作准则

希望这份综合的工作规范能帮助你更好地规划职业发展。如果你对某个特定领域,比如自动驾驶测试或智能座舱测试,有进一步的兴趣,我很乐意提供更具体的信息。

qq_40844444的博客 453

【课程设计】在线学习平台-计算机毕业设计源码63460

首页:注册用户登录后进入的主界面,方便用户快速浏览和选择感兴趣的学习内容。 考试测验:注册用户可以查看和参与平台上的各类考试和测验。提供在线测试功能,用户可以参加模拟考试、课程测验,并查看成绩反馈。 通知公告:用户可以查看平台发布的最新通知和公告,了解平台活动、课程更新、系统维护等重要信息。 学习资讯:提供平台发布的最新学习资讯和教育相关的文章,帮助用户获取最新的学习资源、教育动态以及行业趋势。 课程信息:用户可以浏览平台上提供的所有课程信息,选择并报名自己感兴趣的课程。 我的账户:用户可以查看和管理自己的

Biye_Design的博客 2830

基于电子海图的水面无人艇全局路径规划

Research and Implementation of Global Path Planning for Unmanned Surface Vehicle Based on Electronic Chart (基于电子海图的水面无人艇全局路径规划)   该论文已经在ICMIR2017会议上发表,附上springer的文献地址 Research and Implementation of Gl...

weixin_30797199的博客 1591

5060TI显卡深度学习环境搭建:CUDA12.8与CUDNN9.8.0的完美搭配

本文详细介绍了在Win10系统下为5060TI显卡搭建深度学习环境的最佳实践,重点配置CUDA12.8与CUDNN9.8.0的完美组合。通过优化OpenCV编译选项和YOLOv5环境设置,显著提升模型训练和推理效率,帮助开发者充分发挥5060TI显卡的性能潜力。

weixin_29065791的博客 489

【课程设计】基于Web的郑州人才公寓管理系统的设计与实现 计算机毕业设计源码70354

住户用户的功能包含登录注册、首页、小区公告、小区资讯、安保信息、房屋信息、我的账户、个人中心(个人首页、入住记录、缴费记录、反馈投诉、报修记录、收藏、评论管理)等功能。维修用户的功能包含登录注册、首页、小区公告、小区资讯、安保信息、房屋信息、我的账户、个人中心(个人首页、住户用户、维修用户、安保信息、房屋信息、入住记录、缴费记录、缴费类型、反馈投诉、报修记录、收藏、评论管理)等功能。管理员可管理公共管理(轮播图、小区公告)、用户管理、资讯管理、安保信息、房屋信息、入住记录、缴费记录、缴费类型、反馈投诉、报修

高级程序源的博客 497

ABAP CDS View 从入门到精通教程目录:ABAP CDS View 在 SAP 技术体系中的重要地位

学习 ABAP CDS View 的开发技术,体会其背后的设计理念,也就掌握了 SAP S/4HANA 底层数据模型的设计精髓。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 4777

Instagram Web API 终极指南:如何在Node.js中自动化你的Instagram操作

在当今社交媒体自动化的时代,Instagram Web API 提供了一个强大而完整的解决方案,让开发者能够通过Node.js程序化地管理Instagram账户。这个开源库不仅支持基本的登录和资料获取,还能实现照片上传、点赞评论、关注管理等一系列高级功能,是构建Instagram自动化工具和数据分析应用的理想选择。 ## 为什么选择Instagram Web API? Instagram We

gitblog_00992的博客 959

基于YOLOv5/v8/v10的垃圾分类识别系统:设计实现与性能优化(附代码+数据集)

做完这个毕设,你已经掌握了从数据准备、模型训练到界面开发的全流程。把模型部署到树莓派上,做个真正的“智能垃圾桶”硬件装置;加入语音提示功能,检测到垃圾后自动语音播报类别;试试融合多个YOLO模型的优势,让分类精度再上一个台阶。按照这个教程一步步做,你的毕设不仅能顺利完成,还能做出很多亮点。要是过程中遇到啥问题,别慌,慢慢琢磨或者咱们一起聊聊,肯定能把这个毕设做成让你满意的作品。

know_F0727的博客 463

《网络存储技术》形考实训4:为小微企业搭建基于Windows Server的文件共享与权限管理服务

本文介绍了在域环境下部署DFS分布式文件系统的完整流程。项目目标是将3台存储服务器(NS1、NS2、NS3)上的多个共享文件夹通过DFS命名空间进行统一整合,使员工可通过单一访问路径访问所有资源。实施步骤包括:1)搭建AD域环境并创建用户/组;2)将存储服务器加入域并配置共享权限;3)在域控制器安装DFS命名空间角色;4)创建基于域的命名空间(\xc.cn\共享);5)将各服务器共享文件夹映射到命名空间;6)进行客户端访问验证。通过DFS实现了物理存储位置不变情况下的逻辑统一访问,提高了文件管理的便捷性和可

深耕计算机专业知识与技术。 946

mysql自学

目录一、数据库概念二、mysql安装2.1 ubuntu安装mysql2.2 rockylinux安装mysql2.3 windows安装mysql2.4 数据初始化2.5 修改密码2.6 创建用户2.7 忘记密码2.8 默认端口2.9 远程连接三、数据库管理工具Dbeaver四、mysql练习库4.1 world库4.2 sakila库4.3 employees库4.4 自建库导出4.5 全库备份与恢复(all-databases)4.6 查询结果导出五、SQL语言六、五种数据类型6.1 整数型6.2 浮

zhangli2009x的博客 258

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

ajax异步实现表单的无刷新验证

在 实现ajax异步实现表单的无刷新验证之前我们先要了解什么是异步什么是同步 "同步模式"就是上一段的模式,后一个任务等待前一个任务结束,然后再执行,程序的执行顺序与任务的排列顺序是一致的、同步的;"异步模式"则完全不同,每一个任务有一个或多个回调函数(callback),前一个任务结束后,不是执行后一个任务,而是执行回调函数,后一个任务则是不等前一个任务结束就执行,所以程序的执行顺序与任务的排

zyz0728的博客 4359

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

javaweb 图书管理系统完整代码_Javaweb-案例练习-1-验证邮箱是否存在

如何验证邮箱是否存在前面我们做了一个AJAX练习,就是验证用户名是否存在,现在回到我们的图书管理系统,来写一个如何验证邮箱是否存在的。还是接着之前图书管理后台和前台这个项目,现在是在register.jsp的页面的邮箱验证。1. 项目环境准备之前我们是在一个单独的AJAX web项目里做的用户名是否存在的验证,现在我们需要把js中获取创建XMLHttpRequest对象的js代码复制过来。这个图书...

weixin_39623273的博客 1371

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: 基于spring+dwr+xml无刷新投票(调查)系统
下一篇: Struts2+spring2+hibernate3整合方案
flustar
博客等级 码龄20年 10粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值