jquery获得焦点事件(教你jquery输入框获取焦点)

该表达验证的功能如下:

1、针对每个表单输入控件,用户可设置自定义级别和基本级别的匹配表达式和相应的提示信息;

2、用户离开表单输入控件时会自动校验,如果校验非法,该控件的边框底色会变红

焦点自动定位到第1个输入非法的表达控件,也不会触发回发事件。

4、鼠标放在输入非法的表达控件上,会在输入控件的下方显示输入提示信息。

优势:

1、验证表达式和提示信息可以通过服务器端属性注册实现,便于程序员使用,也便于扩展到从数据库获取设置信息;

2、替代使用aspnet等元框架提供的表达验证控件,既可以减少验证控件对布局的影响,因为验证和输入控件集成,增加了可维护性。

3、其实这种方式稍微修改就可以基于现有的任何框架进行实现,以达到表单验证的无代码。

页面表单验证代码:

注:BaseRegExp为基本验证表达式,OrgRegExp为组织级正则表达式,EntRegExp为企业级验证表达式。一般的应用只要BaseRegExp即可.

(function(){

var InvalidationCheck = function(){

//输入匹配检测

function CheckValidation(input,regexp)

{

if(!input)

{

input = “”;

}

var theMatch =input.match(regexp);

if(theMatch)

{

return true;

}

else

{

return false;

}

}

//创建或获取提示框,如果表单控件的输入不合法,一是该控件的边框颜色会变,二是鼠标经过时会提示规则信息,对客户比较友好。

function CreateMsgDiv(msg)

{

var theDiv = $(‘#MyMessageDiv’);

if(theDiv.length<=0)

{

theDiv = $(“<div id=’MyMessageDiv’ class=’MyTooltip’ style=’display:block’>” msg “</div>”);

}

return theDiv;

}

//获取元素的位置.

function GetElementPos(el)

{

var op = el[0];

var theX = op.offsetLeft;

var theY = op.offsetTop;

while(op =op.offsetParent)

{

theX = op.offsetLeft;

theY = op.offsetTop;

}

return [theX,theY];

}

//获取输入规则信息,用于提示用户.

function GetInputRegulation(obj)

{

var theRet = obj.attr(“inputregmsg”);

return ((theRet==null)?””:theRet);

}

//设置表单输入控件的状态,true表示输入合法,false表示输入非法.

function SetInputState(obj,state)

{

if(state==false)

{

obj.attr(“inputstate”,”false”);

}

else

{

obj.attr(“inputstate”,”true”);

}

}

//获取表达输入控件状态.

function GetInputState(obj)

{

return (obj.attr(“inputstate”) != “false”)?true:false;

}

//保存表单控件的样式,一旦输入合法后可恢复

function SetOldClassName(obj)

{

var theOldStyle = obj.attr(“oldclassname”);

if(theOldStyle==null)

{

var theClass = obj.attr(“className”);

if(!theClass)

{

theClass=””;

}

obj.attr(“oldclassname”,theClass);

}

}

//获取当前样式类名

function GetCurrClassName(obj,IsValid)

{

var theStyle = null;

if(IsValid==true)

{

theStyle = obj.attr(“oldclassname”);

if(!theStyle)

{

theStyle =””;

}

}

else

{

theStyle = “InputIsInvalid”;

}

return theStyle;

}

//设置当前显示样式.

function SetCurrDisplayStyle(obj,IsValid)

{

obj.attr(“className”,GetCurrClassName(obj,IsValid));

}

//检查所有表单控件,适用于保存按钮.

function CheckAllInput()

{

var theFirstInvalidObj = null;

//处理输入框

var inputs = $(‘:text:enabled,textarea:enabled,select:enabled’);

for(var i=0;i<inputs.length;i )

{

//获取OrgRegExp

var theCurrInput =$(inputs[i]);

var theCurrOK = true;

SetOldClassName(theCurrInput);

var theOrgRE = theCurrInput.attr(“OrgRegExp”);

if(theOrgRE)

{

theCurrOK = CheckValidation(theCurrInput.val(),theOrgRE);

SetCurrDisplayStyle(theCurrInput,theCurrOK);

if(theCurrOK==false)

{

SetInputState(theCurrInput,false);

if(!theFirstInvalidObj)

{

theFirstInvalidObj = theCurrInput;

}

continue;

}

}

//获取基本的校验表达式

var theBaseRE = theCurrInput.attr(“BaseRegExp”);

if(theBaseRE)

{

theCurrOK = CheckValidation(theCurrInput.val(),theBaseRE);

SetCurrDisplayStyle(theCurrInput,theCurrOK);

if(theCurrOK == false)

{

if(!theFirstInvalidObj)

{

theFirstInvalidObj = theCurrInput;

}

}

}

SetInputState(theCurrInput,theCurrOK);

}

//获取第一个输入非法的表单控件,默认会自动定位到该控件.

return theFirstInvalidObj;

}

this.ShowTooltipMsg =function(event)

{

var obj = $(this);

if(GetInputState(obj)==false)

{

var Msg = GetInputRegulation(obj);

if(Msg)

{

var theDiv = CreateMsgDiv(Msg);

theDiv.appendTo(‘body’);

var thePos = GetElementPos(obj);

theDiv.css(“left”,thePos[0] event.offsetX “px”);

theDiv.css(“top”,thePos[1] 23 “px”);

}

}

}

this.HiddenTooltipMsg =function(event)

{

var obj = $(this);

if(GetInputState(obj)==false)

{

var theDiv = $(“#MyMessageDiv”);

if(theDiv.length>0)

{

$(“body”)[0].removeChild(theDiv[0]);

}

}

}

this.DoValidationAlbert =function()

{

var theFirstObj = CheckAllInput();

if(theFirstObj)

{

try

{

theFirstObj.focus();

}

catch(ex)

{

}

return false;

}

return true;

}

this.CheckInputValidation=function()

{

//获取OrgRegExp

var theCurrInput =$(this);

var theCurrOK = true;

//设置旧的样式类.

SetOldClassName(theCurrInput);

var theOrgRE = theCurrInput.attr(“OrgRegExp”);

if(theOrgRE)

{

theCurrOK = CheckValidation(theCurrInput.val(),theOrgRE);

SetCurrDisplayStyle(theCurrInput,theCurrOK);

}

if(theCurrOK==false)

{

SetInputState(theCurrInput,false);

return;

}

//获取基本的校验表达式

var theBaseRE = theCurrInput.attr(“BaseRegExp”);

if(theBaseRE)

{

theCurrOK = CheckValidation(theCurrInput.val(),theBaseRE);

SetCurrDisplayStyle(theCurrInput,theCurrOK);

}

SetInputState(theCurrInput,theCurrOK);

}

this.Init = function()

{

$(‘:text:enabled,textarea:enabled,select:enabled’).mouseenter(this.ShowTooltipMsg)

.mouseleave(this.HiddenTooltipMsg)

.mousemove(this.ShowTooltipMsg)

.keypress(this.HiddenTooltipMsg)

.blur(this.CheckInputValidation);

$(document.forms[0]).submit(this.DoValidationAlbert);

}

}

$InputCheck = new InvalidationCheck();

})();

用法:要运行该代码,需要JQuery库。如果不需要中间回发,只需要调用Init初始化一下,验证正则表达式可通过服务器端服务控件注册属性的方式加入。

如果需要回发,则控件事件触发函数挂接,需要在服务器端来完成相关业务逻辑处理。

如果利用服务器控件,有两种方法完成验证表达式和提示信息的方式:一是通过对控件注册属性来完成,一是可以简单继承一下控件,将需要的信息作为服务器控件的属性,并输出到客户端属性。我个人偏向于后一种方法,因为这样,程序员既可以通过所见即所得的方式使用,而且这些验证信息可以从数据库读取,适合规模应用,而且事件的注册也可以在控件中自动完成,免除客户端注册或者手工设置的麻烦。

用什么框架做都无所谓,但核心要把JS和HTML的BOM机制搞明白,这个核心原理及其机制搞明白了,就可以灵活的大规模处理。

jquery获得焦点事件(教你jquery输入框获取焦点)

发表评论

登录后才能评论