我写了一个注册表单 就拿用户名和密码为例吧
用户名 文本框丢失焦点会调用一个方法来验证是否为空 把错误信息用innerHTML的方法插入旁边的表格。最后还得到用户框的焦点全选select() 返回false;
密码框 丢失焦点也一样会调用一个方法来验证密码是否为空 把错误信息用innerHTML的方法插入旁边的表格。 最后 还是获取到密码框的焦点全选select() 返回false; 问题来了:
我网页打开时候默认的焦点是在用户名框。
如果我不写用户名而直接去点密码框 悲剧就产生了,在旁边的表格中提示出了两个框的输入错误信息,
两个框框相互争夺焦点 成了循环了 不知道各位出现过这个情况没有。 说是为了人性化 输入有误后会在错误的文本框选中方便用户再次修改输入。
难道不把获取焦点那句全选删了 就没有别的方法么?
用户名 文本框丢失焦点会调用一个方法来验证是否为空 把错误信息用innerHTML的方法插入旁边的表格。最后还得到用户框的焦点全选select() 返回false;
密码框 丢失焦点也一样会调用一个方法来验证密码是否为空 把错误信息用innerHTML的方法插入旁边的表格。 最后 还是获取到密码框的焦点全选select() 返回false; 问题来了:
我网页打开时候默认的焦点是在用户名框。
如果我不写用户名而直接去点密码框 悲剧就产生了,在旁边的表格中提示出了两个框的输入错误信息,
两个框框相互争夺焦点 成了循环了 不知道各位出现过这个情况没有。 说是为了人性化 输入有误后会在错误的文本框选中方便用户再次修改输入。
难道不把获取焦点那句全选删了 就没有别的方法么?
得到用户框的焦点全选select()这是在干嘛?各是各的,你去全选干嘛?各自用各自的触发事件就行了。。
<script language="javascript">function checkU(){
var name = document.f1.username.value;
/*** 用户名的验证 ***/
if(name==""||name.length==0){
checku.innerHTML="<font color='red'>用户名不能为空</font>";
//alert('用户名不能为空');
document.f1.username.select();
return false;
}else{
if(!/^[0-9a-zA-Z]+$/.test(name)){
checku.innerHTML="<font color='red'>用户名只能由数字和字母组成</font>";
document.f1.username.select();
return false; }else{
checku.innerHTML="<font color='green'>恭喜,用户名可以注册</font>";
return true;
}
} function checkP(){
var pass1 = document.f1.password1.value;
var pass2 = document.f1.password2.value;
/** 密码框的验证 ***/
if(pass1==""||pass1.length==0){
checkp.innerHTML="<font color='red'>密码不能为空</font>";
document.f1.password1.select();
return false;
}else{
if(pass1.length>6&&pass1.length < 15){
//如果密码长度足够
checkp.innerHTML="<font color='green'>√</font>";
/*** 密码相同验证 ***/
if(pass1 != pass2 ){
checksp.innerHTML="<font color='red'>两次密码输出不一样</font>";
document.f1.password2.select();
return false;
}else{
checksp.innerHTML="<font color='green'>√</font>";
return true;
}
}else{
checkp.innerHTML="<font color='red'>密码长度大于6位且小于15位</font>";
document.f1.password1.select();
return false;
}
}
}<script ><form name="f1" action="" method="post" onsubmit="return checkU()&&checkP()">
用户:<input type="text" name="username" onblur="checkU();"><br>
密码:<input type="password" name="password1" onblur="checkP();"><br>
密码确认:<input type="password" name="password2" ><br>
<input type="submit" value="提交" />
<input type="reset" value="取消" />
</form>回复kouyiSC:
为了用户人性化,比如输入错了会自动回到那个输入错的框并且全选,方便用户操作。
出现争夺焦点。是因为你onsubmit="return checkU()&&checkP()",同时调用了两个方法。。都去检查。。正确的逻辑应该是。。只要检查出用户框为空,,下面的密码框就不用检查了。。分先后顺序。
还有就是。。用户框检查都没通过。。又去检查密码框没有必要。