`
jarrywin
  • 浏览: 25767 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

JS客户端校验

阅读更多
      在最近的一个项目中,用到了几种客户端校验方式,在这里和大家探讨一下。

     第一种是最一般的js客户端校验,在提交表单的时候触发js里的一个方法,在这个方法里校验客户所填的数据是否合法,并给予提示。
例如: 
<script>
function submitForm()
{
    var userName = document.getElementById("userName").value;
    if(userName==""){
    alert("姓名不能为空!");
    document.getElementById("userName").focus();
    return false;
    }    
	document.form.submit();
}
</script>

在JSP页面里
 <button onclick=”submitForm();”>提交</button> 

这样一旦用户名为空,就会弹出一个对话框。这种方式比较古老,显示的对话框也不大美观。


第二种是利用例如文本框得到和失去焦点时调用不同的方法来实现校验,可以参考赶集网的校验方式:http://tetlaw.id.au/view/javascript/really-easy-field-validation
简单的例子如下:
JS:
function click_email_input(thisinput)
{
		document.getElementById('regemailinfo').className='s1';
		document.getElementById('regemailinfo').innerHTML="请输入有效Email(电子邮件)";
}
//失去Email焦点
function check_email_input(thisinput)
{
	var re = /^[_\.0-9a-zA-Z-]+[0-9a-zA-Z]@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,3}$/; 
	
	if ( (thisinput.value == '') ) {
		document.getElementById('regemailinfo').className="s2";
		document.getElementById('regemailinfo').innerHTML="系统检测到你未有任何输入,此项为必填内容,请重新填写!";

else if (!thisinput.value.match(re))
	{
		document.getElementById('regemailinfo').className = 's2';
		document.getElementById('regemailinfo').innerHTML = '你输入的内容不符合规范,请重新填写!';
	}
	
	else
	{
		document.getElementById('regemailinfo').className = 's3';
		document.getElementById('regemailinfo').innerHTML = '输入的内容符合规范,可以使用!';
	}
}

JSP片段:

  
<tr>
    <th scope="row"><div align="left"><span class="STYLE2">电子邮件:</span></div></th>
    <td>
      <div align="left">
        <input name="email" id="email" type="text" size="30" onblur="check_email_input(this)" onfocus="click_email_input(this)"/>
      </div></td>
    <td><span id="regemailinfo" class=""></span></td>
  </tr>

当鼠标点击文本框的时候调用click_email_input(this) 方法,离开文本框的时候调用check_email_input(this) 方法,改变span的CSS属性和span的内容来提示用户。这种方式给人以十分绚丽的感觉。


     第三种方式是比较流行的,使用扩展基于prototype的validation.js ,
<script src="prototype.js" type="text/javascript"></script>
<script src="validation.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="style.css" />

接着为表单控件设置class属性,属性名为预定义的(可扩展)的校验器名

<input class="required validate-number" id="field1" name="field1" />

最后创建一个 Validation 对象,以表单id为构造函数的参数

<script type="text/javascript">
    new Validation('form-id');

</script>

使用相当的简单,最可贵的就是假如脚本未能加载成功或者浏览器端的脚本被禁用,原始的表单仍然可以按传统的方式进行提交(配合后台校验),这可算是优雅的 Unobtrusive JavaScript 的又一个经典范例。

下面是一个最简单的例子:
<body>


<form action="" id="test_form">
 
   金额:
    <input class="required validate-number" id="sum" name="sum" title="必须填写有效金额."/>
  
    
        <input name="submit" type="submit" value="提交"/>
    
</form>
<script type="text/javascript">
   
var valid = new Validation('test_form', {useTitles : true});
 
</script>
</body>



在表单控件的class属性中,required表示不能用空,validate-number表示所填内容必须为数字,
还有title属性表示显示错误信息的内容。最后创建一个 Validation 对象,以表单id为构造函数的参数,useTitles属性默认为false,表示显示错误信息为默认信息,把该属性设为true,则显示的错误信息为title属性所定义的内容。也可以假如其他属性,例如:immediate,默认也为false,在提交表单的时候才进行校验,把该属性设为true,则在表单控件失去焦点的时候丢相应空间进行校验。如果里面的校验类型还不能满足你的要求,也可以自定义校验类型
只需要添加
Validation.addAllThese([
							['validate-password', 'Your password must be more than 6 characters and not be \'password\' or the same as your name', {
								minLength : 7,
								notOneOf : ['password','PASSWORD','1234567','0123456'],
								notEqualToField : 'field1'
							}],
							['validate-password-confirm', 'Your confirmation password does not match your first password, please try again.', {
								equalToField : 'field8'
							}]
						]);


这个方法增加了密码和重复密码的校验。


从 validation.js 里截取的一段源码看其实现机制:

......
Event.observe(this.form,'submit',this.onSubmit.bind(this),false);
......由上代码可知该库注册了表单的 onsubmit 事件处理,当用户电击submit按钮的时候,校验被触发。
     不过我在实际应用中遭遇了麻烦,因为我是用一个普通按钮调用JS的一个方法来模拟 submit 按钮的, 问题就在于,由JavaScript代码模拟的提交行为居然是不激发 onsubmit 事件的,这样设置的校验行为就被直接跳过了。各位有什么好的建议请留言。


还有一个问题就是,错误信息显示的位置是固定的,都是在表单控件的下方,想要在特定的位置显示错误信息还要进行一些处理。

可以使用
 
<div id="advice-validate-one-required-test[]">
 </div>


id的模式等于:
 advice-$validatorName-$elementId


例如:
<div> 
<input type="checkbox" name="test[]"> a 
<input type="checkbox" name="test[]"> b 
<input type="checkbox" name="test[]" class="validate-one-required 
"> c 
</div> 
<div id="advice-validate-one-required-test[]"></div>


这样错误信息就显示在DIV中。这个例子是别人提供的,他想要的效果都出来了,但我自己试了一下:
<div align="left">
      <input  class="required "  title="请输入密码." name="pwd" id="pwd" type="password" size="25"/>
      </div>
      
      <div id="advice-required-pwd">请输入密码</div>

<script type="text/javascript">
    new Validation('form',{useTitles : true,immediate : true});
</script>




当输入信息符合要求时,DIV(id=advice-required-pwd)里的信息就会消失,将输入信息去掉,DIV里的错误信息又会出现。
分享到:
评论
1 楼 java-007 2007-12-19  
师兄好,我是你下一级的同学,老师介绍来看看你的博客,搞的确实不错,挺实用的!

相关推荐

    Asp.Net MVC之客户端校验

    客户端验证通过JavaScript实现,Asp.Net MVC框架会自动生成相应的JavaScript代码,基于这些规则对用户的输入进行实时验证。默认情况下,如果浏览器支持,MVC会启用客户端验证。若要禁用或启用,可以在Global.asax.cs...

    struts2 短路校验(客户端校验)

    客户端校验通常使用JavaScript或HTML5的内置验证功能来实现。这种方式可以提高应用的响应速度,因为用户无需等待服务器响应就能看到错误信息。同时,它减少了服务器的负载,因为只有校验通过的数据才会被发送到...

    js客户端校验

    我都测试过了,都是正确的

    安全测试之避开客户端校验

    比如使用javascript来校验长度是否超长,格式是否正确,使用隐藏html表单字段进行数据传送,使用url参数传送数据等等。  但是,这样做存在一个基本的安全缺陷:用户能够完全控制客户端及提交的数据,即避开任何在...

    ASP.NET MVC框架开发系列课程(18):客户端校验

    在本课程"ASP.NET MVC框架开发系列课程(18):客户端校验"中,我们将深入探讨如何在客户端进行数据验证,以提供更好的用户体验和减少服务器负担。 客户端验证是在用户浏览器端进行的,它允许我们在用户提交表单之前...

    动态Web应用中客户端数据校验技术探讨.pdf

    【动态Web应用中客户端数据校验技术】 随着互联网技术的快速发展和电子商务时代的到来,动态Web应用已经成为企业在线服务的重要组成部分。动态网站允许用户交互并提供后台数据库管理,但这种技术体系结构存在一个...

    web端不限制浏览器获取客户端MAC+IP地址进行权限安全校验

    web端项目通过浏览器访问的项目获取客户端mac地址及ip地址,进行登录权限校验; web端通过浏览器访问的项目增加权限; 本次项目由于对数据安全性要求较为严格,所以增加了用户在登录时对于客户端电脑的ip地址和mac...

    MD5加密和JS 校验码MD5加密和JS 校验码

    通过在服务器端生成校验码,并在客户端使用JS进行验证,可以防止恶意篡改数据。例如,服务器返回一个文件的MD5校验码,用户在下载文件后,前端JS可以再次计算文件的MD5并比对,以确保下载的文件与服务器上的文件一致...

    后台JS校验框架

    在IT领域,后台JS校验框架是用于在服务器端执行JavaScript代码,对用户提交的数据进行验证的一种工具。这种框架通常被开发人员用来提高应用的安全性和用户体验,因为它可以在数据到达数据库之前检测并处理潜在的错误...

    javascript 常用校验代码

    JavaScript是一种广泛应用于网页和网络应用的编程语言,尤其在客户端脚本方面发挥着重要作用。它提供了丰富的功能,如数据验证、交互式用户界面以及与服务器的通信。在开发过程中,有效的代码校验是确保程序质量的...

    Web通用的表单校验JS

    本文将详细介绍一种通用的JavaScript(JS)表单校验方法,通过导入特定的JS文件,可以轻松实现对用户输入的验证。 首先,让我们了解什么是JavaScript表单校验。JavaScript是一种客户端脚本语言,它允许我们在用户的...

    JavaScript校验设计.zip

    JavaScript是一种广泛应用于网页和网络应用的脚本语言,主要负责客户端的数据验证和用户交互。在网页开发中,JavaScript校验设计扮演着至关重要的角色,它能够确保用户输入的数据符合预设的格式和规则,减少服务器端...

    页面输入校验

    3. **客户端校验**:客户端校验是指在用户的浏览器端执行的校验,通常使用JavaScript或HTML5的内置校验功能。这种校验可以提供即时反馈,减少服务器的负担,但可能被恶意用户绕过。 4. **服务器端校验**:尽管...

    js校验组件包

    JavaScript(简称JS)是一种轻量级的、解释型的编程语言,主要应用于Web前端开发,用于实现客户端的交互效果和数据验证。在这个“js校验组件包”中,我们可以找到一系列专为网页表单验证而设计的JS组件。这些组件...

    基于Java的Web应用程序中数据校验的实现.pdf

    一是客户端校验,在数据提交到服务器之前进行。这种校验通常使用运行在客户端浏览器内的JavaScript完成。二是在服务器端校验,在执行对数据的任何操作之前,使用应用服务器支持的技术来完成校验。 在客户端数据校验...

    Struts2的输入校验实例代码

    客户端校验通常通过JavaScript在用户的浏览器中执行,它可以快速反馈错误并避免不必要的服务器请求。然而,客户端校验的缺点在于,其可以被轻易绕过,因此不能完全依赖于客户端校验来保证数据的安全性。 2. **...

    javascript常用校验脚本

    JavaScript是一种广泛应用于网页和网络应用的编程语言,它在客户端执行,可以实现丰富的用户交互。在前端开发中,数据验证是必不可少的环节,确保用户输入的数据格式正确、合法,能够有效防止错误信息的提交,提高...

    struts2输入校验

    客户端校验主要通过JavaScript在用户端进行,可以提供即时反馈,但安全性较低,因为用户可以禁用JavaScript或绕过校验。服务器端校验则是在服务器接收到请求后进行,提供更高级别的安全保证,但无法提供即时反馈。 ...

    Struts2的输入校验

    2. 客户端校验:Struts2支持在客户端进行输入校验,通常通过JavaScript实现,可以在表单提交前就捕获错误,提高用户体验。 3. 服务器端校验:当请求到达服务器时,Struts2会尝试调用`validateXxx()`方法,其中`Xxx`...

    Cron expression 校验 js版本

    JavaScript版本的Cron表达式校验工具则为前端开发人员提供了一个方便的解决方案,可以在客户端进行定时任务配置的验证。 Cron表达式的语法结构相对复杂,由六个或七个字段组成,每个字段代表不同的时间单位,从秒到...

Global site tag (gtag.js) - Google Analytics