用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

【探秘】二维异形件重叠移除算法:从度量到消除的实战解析

本文深入解析二维异形件重叠移除算法的核心技术与实战应用,涵盖重叠度量、零件扰动策略及消除方法。通过NFP(临界多边形)技术、空间分区加速等优化手段,有效解决异形件排版中的重叠问题,提升材料利用率和计算效率。适合制造业、CAD软件开发者及算法工程师参考。

weixin_28698059的博客 253

增量编码器资讯大全

增量编码器是什么 增量式编码器是将位移转换成周期性的电信号,再把这个电信号转变成计数脉冲,用脉冲的个数表示位移的大小,按照工作原理编码器可分为增量式和绝对式两类。 增量式编码器是将位移转换成周期性的电信号,再把这个电信号转变成计数脉冲,用脉冲的个数表示位移的大小。 编码器是把角位移或直线位移转换成电信号的一种装置。前者称为码盘,后者称码尺.按照读出方式编码器可以分为接触式和非接触式两种.接触式采...

kindele的博客 6009

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

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

Biye_Design的博客 1699

基于深度学习的UWB门禁检测

针对基于UWB技术智能门禁管理系统,由于测距误差或非视距原因导致门禁产生不合理动作的现象。分析如何采用基于深度学习的方法,通过对TWR测距数据、TWR监听数据、到达角度差(PDOA)、信道脉冲响应(CIR)等数据维度进行深度学习,利用 TensorFlow建立相应的推导模型,对卡片姿态进行更加精准可靠的检测,从而更好完成闸机开合控制。

tenth_quadrant的博客 2027

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

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

Biye_Design的博客 2830

Rockchip RK3566 Buildroot SDK构建与内核编译实战指南

嵌入式Linux开发中,交叉编译环境是系统启动的基础支撑。Buildroot作为轻量级嵌入式构建框架,通过配置驱动、自动化下载和分层编译机制,显著降低定制化Linux发行版的集成门槛。其核心价值在于将内核、根文件系统与工具链统一管理,兼顾资源约束下的确定性构建与工程可复现性。典型应用场景涵盖ARM64平台(如RK3566)的固件开发、IoT设备量产镜像生成及硬件Bring-up阶段的快速验证。本文围绕Buildroot SDK全流程实践,深入解析环境搭建、Repo源码同步、离线DL库预置及内核编译等关键环节

weixin_36047538的博客 136

电源完整性仿真流程梳理

可根据仿真流程导图,一步一步的去设置完成仿真。仿真的关键,在于对电路回路的理解以及所放置的电压源与电流的合理性,对于去耦电容的选择,则需要根据谐振频率计算,从而选取有效滤波的容值。

csy17729158342的博客 3442

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

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

高级程序源的博客 497

通过TMS320F28335学习DSP的开发流程——28335的基础知识(1)

1、TMS320F28335内核的主要特点 ①F28335 DSP集成了DSP和微控制器的长处,如DSP的主要特征、单周期乘法运算,F28335能够在一个周期内完成32x32位的乘法累加运算,或者两个16x16位乘法累加运算,而同样32位的普通单片机则需要4个周期以上才能完成 ②快速的中断响应 ③可在任何内存位置进行单周期读、修改、写操作 ④可采用C/C++编程软件,效率非常高 2、处理器的主要资源 ①32位浮点DSP,主频是150MHz,方便电机控制、电力设备控制及工业控制等。 ②片上存储器:FLASH–

Kayboy的博客 2万+

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

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

gitblog_00992的博客 959

AMD显卡跑MiniMax H3提速30%:SageAttention ROCm适配全记录

在Transformer架构的视频生成模型中,注意力计算往往是性能瓶颈,尤其当显存资源受限时,低精度量化与内核优化成为关键突破口。SageAttention通过将QK^T矩阵乘法量化为INT8,并以FP16/INT4表达注意力概率矩阵,在保证画质的前提下显著降低访存与计算开销,相比传统FlashAttention具备更高速度上限。这一技术价值在本地部署场景尤为突出——当用户使用非NVIDIA显卡运行大型视频模型时,通用优化库常因依赖CUDA而失效。本文聚焦AMD ROCm平台下的MiniMax H3视频生成

weixin_32238157的博客 282

跨平台C#上位机开发:.NET MAUI与工业物联网的融合实战

NET MAUI正在重塑工业上位机的开发模式——从“为单一设备定制”转向“全场景覆盖”。其价值不仅在于“代码复用”,更在于打通了工业物联网的“最后一公里”:让边缘设备、云平台、移动终端通过统一的数据模型协同工作。未来,随着.NET MAUI对WebAssembly的支持(计划在.NET 9实现),上位机甚至可直接运行在浏览器中,进一步降低部署门槛。对于工业开发者,掌握跨平台技术意味着能更快响应多样化的现场需求,从“Windows专家”升级为“全栈工业开发者”。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1091

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

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

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

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

zyz0728的博客 4359

计算机控制技术及应用

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

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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

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

weixin_39623273的博客 1371

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: 基于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、付费专栏及课程。

余额充值