当在input type="text" 的输入不符合要求时, 能否让焦点固定在这个TEXT控件中? 因为onblur是失去焦点之后才触发的,如果焦点刚好在另一个有同样限制的控件上就会"死循环"如果有一个事件在焦点离开之前触发的话,就可以轻松解决我的问题. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 onblur="doTest(this)"function doTest(obj){ if(!ok){ obj.focus(); }} 应该在所有控件上都套用onfocus,里面写上判断,如果不行,利用tab顺序反跳 其实你只要载form中做一个触发就可以了比如:<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 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()}); //bindBefor:将一个方法绑定到另一个方法之前。详见我的博客。 } }}var unfocus = function(ele){ if(getVisb(ele)!="hidden"&&ele.onblurChanged){ if(ele.oldOnblur)ele.onblur= ele.oldOnblur; else ele.onblur = ""; ele.onblurChanged = false; }} 另外,验证结果最好不要alert,这个也可能造成与onblur的死锁。改成动态添加div提示。 汗!你喜欢用onblur但又说它死锁onblur="this.focus()"这个怎么个死循环了? chinmo:他说的是真的,当两个域都用onblur=this.focus()时,肯定是会死锁的。比如A和B都绑定了onblur=this.focus();当从A把焦点移到B时,A触发了onblur事件,并试图把焦点转移到B,此时又触发了B的onblur事件。于是就-----“死锁”啦。 sorry:"并试图把焦点转移到B"应为"并试图把焦点转移到A" onbeforedeactivate="if(this.value!=1)this.focus()"另外,用blur也没错,有一点要注意:不要同时让两个输入框里都有非法的值要做到这一点,只需保证所有的默认值都合法就成:默认值包括:devaultValue/js赋进的值空值应该是合法的(不应该在离开焦点时进行必须验证). onbeforedeactivate="if(this.value!=1) return false;" 我要实现图片间歇向上滚动,但循环滚动两次后就自动停止,有哪位大侠知道什么原因,谢谢 js技术求助 关于JS复制radio控件时的重复性问题(JQUERY) JS控制显示DIV显示内容 在网页中用RealPlayer控件播放电影,javascript怎样用RealPlayer 事件来知道电影已播放完毕? 求一个JS的折叠菜单,就像CSDN左侧的导航,但是不是树状的是折叠的那样 JS拖拽的一点点小问题!~~100分了~ 请教:如何更改td的class? 求教ExtJs 浏览器兼容问题,在线等候.... setTimeout 时间不生效,函数生效了 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赋进的值
空值应该是合法的(不应该在离开焦点时进行必须验证).