因为onblur是失去焦点之后才触发的,如果焦点刚好在另一个有同样限制的控件上就会"死循环"如果有一个事件在焦点离开之前触发的话,就可以轻松解决我的问题.
解决方案 »
- js如何在打开网页时,用代码来让文本框获得焦点
- 整个页面用 javascript 禁用了右键和选择功能,现在想让一个 id 为textbox1文本框内容可以选择和右键,请问该怎么写?实在是没分了啊,谢谢啊
- 怎么让JS文件代码对齐?
- ********** 超简单问题,怎么获取一某天的前一天,后一天 ***************
- 如何用jQuery 实现
- 在htm页面中提示缺少')'
- 参数传递的转换问题
- 关于层的操作问题,请各路豪杰帮忙!!!
- 如何得到 windows 系统命令中 Copy 所得到的字符串(付给一个自定义变量)
- window.open('openwin.htm','newwin','fullscreen=yes,scrollbars=no');为什么滚动条还有?
- js的时间计算
- 无法固定第一个单元格的宽度,
function doTest(obj){
if(!ok){
obj.focus();
}
}
比如:
<SCRIPT language=JavaScript type="text/javascript">
<!--
<!-- hide this script from non-javascript-enabled browsers
function chkform(){
//check the user input value
if( document.form2.realname.value==""){
alert("真实姓名不能为空");
document.form2.realname.focus();
return false;
}
var rname=/^[\u4E00-\u9FA5]{2,4}$/;
if( !rname.test(document.form2.realname.value)) {
alert("真实姓名只能为汉字,且最多只能是四个汉字!");
document.form2.realname.focus();
document.form2.realname.select();
return false;
}
if( document.form2.sex.value==""){
alert("请选择性别!");
document.form2.sex.focus();
return false;
}
if( document.form2.cyear.value==""){
alert("生日年份不能为空!");
document.form2.cyear.focus();
return false;
}
// stop hiding -->
//-->
</SCRIPT>
<form action="" method="post" name="form2" onSubmit="return chkform();" style="margin:0">
<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="200" height="20" align="right"><span class="STYLE2">真实姓名:</span></td>
<td><input name="realname" type="text" class="inp" id="realname" size="15"></td>
</tr>
<tr>
<td width="200" height="20" align="right">性别:</td>
<td><input name="sex" type="radio" value="男" checked >
男
<input type="radio" name="sex" value="女" >
女</td>
</tr>
</table>
这样不就可以了?
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()});
//bindBefor:将一个方法绑定到另一个方法之前。详见我的博客。
}
}
}
var unfocus = function(ele){
if(getVisb(ele)!="hidden"&&ele.onblurChanged){
if(ele.oldOnblur)ele.onblur= ele.oldOnblur;
else ele.onblur = "";
ele.onblurChanged = false;
}
}
但又说它死锁
onblur="this.focus()"
这个怎么个死循环了?
比如A和B都绑定了onblur=this.focus();当从A把焦点移到B时,A触发了onblur事件,并试图把焦点转移到B,此时又触发了B的onblur事件。于是就-----“死锁”啦。
另外,用blur也没错,
有一点要注意:不要同时让两个输入框里都有非法的值
要做到这一点,只需保证所有的默认值都合法就成:
默认值包括:devaultValue/js赋进的值
空值应该是合法的(不应该在离开焦点时进行必须验证).