java网络编程记一下 http://www.jspcn.net/htmlnews/B20070807102121.html
来源:互联网 发布:js判断浏览器类型 编辑:程序博客网 时间:2024/06/05 09:00
在表单的验证中,为了做到强验证,许多人会将验证域绑定onblur事件:
var notis = [notis0,notis1,....] //提示信息
function validate(patten)...{
if(this.value.test(patten)...{ //patten为验证正则表达式。
this.focus();
this.select();
return notis[i];
}
}
function validate(patten)...{
if(this.value.test(patten)...{ //patten为验证正则表达式。
this.focus();
this.select();
return notis[i];
}
}
但这种绑定有些问题,当两个以上的域同时使用这种绑定时,会造成死锁。
假设域A和域B都绑定了上述事件,当焦点从A转移到B时,触发了A的onblur事件,并试图把焦点从B转移到A,并触发了B的onblur事件,于是就......死锁啦。
解决这个问题的方案有两个:
一是把强提示改为温和提示,改为绑定onchange事件。
二是判断其他域是否已经获得焦点。
var otherElementFocusing = function()...{
var focusing = false;
var eles = document.getElementsByTagName("INPUT");
for(var i=0;i<eles.length;i++)
if(eles[i].onblurChanged)focusing = true;
eles = document.getElementsByTagName("TEXTAREA");
for(i=0;i<eles.length;i++)
if(eles[i[.onblurChanged)focusing = true;
return focusing;
}
var focus = function(ele)...{
if(otherElementFocusing()||getVisib(ele)== "hidden")return;//getVisib:获得display和visibility
if(!ele.onblurChanged)...{
ele.onblurChanged = true;
if(!ele.onblur)...{
ele.select();
ele.focus();
ele.onblur = function()...{ele.select();ele.focus()}
}else ...{
ele.oldOnblur = ele.onblur;
ele.onblur = ele.onblur.bindBefore(function()...{ele.select();ele.focus()});
}
}
}
var unfocus = function(ele)...{
if(getVisb(ele)!="hidden"&&ele.onblurChanged)...{
if(ele.oldOnblur)ele.onblur= ele.oldOnblur;
else ele.onblur = "";
ele.onblurChanged = false;
}
}
var focusing = false;
var eles = document.getElementsByTagName("INPUT");
for(var i=0;i<eles.length;i++)
if(eles[i].onblurChanged)focusing = true;
eles = document.getElementsByTagName("TEXTAREA");
for(i=0;i<eles.length;i++)
if(eles[i[.onblurChanged)focusing = true;
return focusing;
}
var focus = function(ele)...{
if(otherElementFocusing()||getVisib(ele)== "hidden")return;//getVisib:获得display和visibility
if(!ele.onblurChanged)...{
ele.onblurChanged = true;
if(!ele.onblur)...{
ele.select();
ele.focus();
ele.onblur = function()...{ele.select();ele.focus()}
}else ...{
ele.oldOnblur = ele.onblur;
ele.onblur = ele.onblur.bindBefore(function()...{ele.select();ele.focus()});
}
}
}
var unfocus = function(ele)...{
if(getVisb(ele)!="hidden"&&ele.onblurChanged)...{
if(ele.oldOnblur)ele.onblur= ele.oldOnblur;
else ele.onblur = "";
ele.onblurChanged = false;
}
}
这样可以从onblur和focus的循环中解脱出来。
方法二的使用需要注意的是,验证提示方法http://www.jspcn.net/htmlnews/B20070807102121.html不要使用alert。道理同上,alert后,点击确定也会触发验证域的onblur事件,造成验证域与alter窗口间的死锁。
- java网络编程记一下 http://www.jspcn.net/htmlnews/B20070807102121.html
- 多线程Java Socket编程示例(http://www.blogjava.net/sterning/archive/2007/10/15/152940.html)
- http://www.pghome.net/art.html exam
- http://www.contextfree.net/wangyg/i_04.html
- http://www.itwis.com/html/net/c/
- http://www.jb51.net/books/list17_3.html
- http://www.silverlightchina.net/html/news/
- http://www.itnose.net/detail/6162169.html
- http://www.qmailer.net/archives/251.html
- [转载自网络http://www.qnwz.net/zawen/40804.html]来生想做哪国人?
- Socket网络编程(http://www.cnblogs.com/hellojava/archive/2013/01/25/2861127.html)
- http://www.infocool.net/kb/WWW/201612/246490.html
- http://www.xcopy.net.cn 网络收藏夹
- .net多线程编程的经验(收藏转帖http://www.cnblogs.com/hzuIT/articles/924757.html)
- Windows编程基础 - 概述http://www.bccn.net/Article/kfyy/cjj/jszl/200412/429_6.html
- 试用了一下FCKeditor,感觉不错(http://www.fckeditor.net)
- Linux网络编程之socket文件传输示例(http://www.jb51.net)
- http://www.jactiongroup.net/reference/html/jms.html
- fjnu 1903 数字统计
- 评侯捷的<深入浅出MFC>和李久进的<MFC深入浅出>
- topcoder题目及我的程序(3)——league picks
- 哀!
- 三学期开学了...........
- java网络编程记一下 http://www.jspcn.net/htmlnews/B20070807102121.html
- JSF+HIbernate+Spring结合
- Watir测试工具简述
- 323
- 这是加密代码!!!
- 动易漏洞
- 哈佛图书馆的训诫
- 杂
- 字符串与byte[]之间的转换