果然没说清楚...囧..
呵呵,分步说明:
1.主要功能是修改身份证的,包括验证文本域是否为空,值是否是一个有效的身份证号(功能都能实现)
2.表单由2个text、1个button和1个reset组成
3.2个txet验证功能由onBlur()完成
4.button主要验证2个text是否为空和是否相等(确认作用)
5.问题描述:
IE下,完全符合我的要求,当在第一个text中输入错误的号码,会一直提示出错光标不能定位到其他组件上
FF下,在第一个text中输入错误的号码,在第二个text中点击时,提示出错,但是,点掉错误提示框的时候光标已经在第二个text中了,在第二个text中输入与第一个text中相同的内容(2个都是错的),点击button,能提交!这就是问题,IE下不会
6.如果还没说清楚,我就...我就......算了...
下面是代码:表单:<form id="ModifyForm" name="ModifyForm" method="post" action="***" >
<table width="500px" border="0" align="center">
<td><div align="right">新身份证号:</div></td>
<td colspan="2"><label>
<input name="newSfzh" type="text" id="newSfzh" size="40" onBlur="validId(this)"/>
</label></td>
</tr>
<tr>
<td><div align="right">请确认输入:</div></td>
<td colspan="2"><label>
<input name="confirmSfzh" type="text" id="confirmSfzh" size="40" onBlur="validId(this)"/> </label></td>
</tr>
<tr>
<td height="42"> </td>
<td width="33%"><label>
<input type="button" name="button" id="button" value="提交" onClick="checkNull()"/>
</label>
</td>
<td width="31%"><label>
<input type="reset" name="reset" id="reset" value="重置" />
</label>
</td>
</tr>
</table>
</form>表单里面引入的js文件: function checkNull() {
var flag = true;
var n = document.ModifyForm.newSfzh.value;
var c = document.ModifyForm.confirmSfzh.value;
if(n == ""||n.length==0) {
window.alert("新身份证号码不能为空!");
document.ModifyForm.newSfzh.focus;
flag = false;
} else if (c == ""||c.length==0){
window.alert("确认身份证号码不能为空!");
document.ModifyForm.newSfzh.focus;
flag = false;
} else if(n!=c){
window.alert("两次输入的身份证号码不一致,请检查后再提交!");
document.ModifyForm.newSfzh.focus;
flag = false;
}
if(flag) {
document.ModifyForm.submit();
}
}
var powers=new Array("7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2");
var parityBit=new Array("1","0","X","9","8","7","6","5","4","3","2");
//var sex="male";
//校验身份证号码的主调用
function validId(obj){
var _id=obj.value;
if(_id=="")return;
var _valid=false;
if(_id.length==15){
_valid=validId15(_id);
}else if(_id.length==18){
_valid=validId18(_id);
}
if(!_valid){
alert("身份证号码有误,请检查!");
obj.focus();
return;
}
//设置性别
/*
var sexSel=document.getElementById("sex");
var options=sexSel.options;
for(var i=0;i<options.length;i++){
if(options[i].value==sex){
options[i].selected=true;
break;
}
}*/
}
//校验18位的身份证号码 function validId18(_id){
_id=_id+"";
var _num=_id.substr(0,17);
var _parityBit=_id.substr(17);
var _power=0;
for(var i=0;i< 17;i++){
//校验每一位的合法性 if(_num.charAt(i)<'0'||_num.charAt(i)>'9'){
return false;
break;
}else{
//加权 _power+=parseInt(_num.charAt(i))*parseInt(powers[i]);
//设置性别 if(i==16&&parseInt(_num.charAt(i))%2==0){
sex="female";
}else{
sex="male";
}
}
}
//取模 var mod=parseInt(_power)%11;
if(parityBit[mod]==_parityBit){
return true;
}
return false;
}
//校验15位的身份证号码 function validId15(_id){
_id=_id+"";
for(var i=0;i<_id.length;i++){
//校验每一位的合法性 if(_id.charAt(i)<'0'||_id.charAt(i)>'9'){
return false;
break;
}
}
var year=_id.substr(6,2);
var month=_id.substr(8,2);
var day=_id.substr(10,2);
var sexBit=_id.substr(14);
//校验年份位 if(year<'01'||year >'90')return false;
//校验月份 if(month<'01'||month >'12')return false;
//校验日 if(day<'01'||day >'31')return false;
//设置性别 if(sexBit%2==0){
sex="female";
}else{
sex="male";
}
return true;
}
呵呵,分步说明:
1.主要功能是修改身份证的,包括验证文本域是否为空,值是否是一个有效的身份证号(功能都能实现)
2.表单由2个text、1个button和1个reset组成
3.2个txet验证功能由onBlur()完成
4.button主要验证2个text是否为空和是否相等(确认作用)
5.问题描述:
IE下,完全符合我的要求,当在第一个text中输入错误的号码,会一直提示出错光标不能定位到其他组件上
FF下,在第一个text中输入错误的号码,在第二个text中点击时,提示出错,但是,点掉错误提示框的时候光标已经在第二个text中了,在第二个text中输入与第一个text中相同的内容(2个都是错的),点击button,能提交!这就是问题,IE下不会
6.如果还没说清楚,我就...我就......算了...
下面是代码:表单:<form id="ModifyForm" name="ModifyForm" method="post" action="***" >
<table width="500px" border="0" align="center">
<td><div align="right">新身份证号:</div></td>
<td colspan="2"><label>
<input name="newSfzh" type="text" id="newSfzh" size="40" onBlur="validId(this)"/>
</label></td>
</tr>
<tr>
<td><div align="right">请确认输入:</div></td>
<td colspan="2"><label>
<input name="confirmSfzh" type="text" id="confirmSfzh" size="40" onBlur="validId(this)"/> </label></td>
</tr>
<tr>
<td height="42"> </td>
<td width="33%"><label>
<input type="button" name="button" id="button" value="提交" onClick="checkNull()"/>
</label>
</td>
<td width="31%"><label>
<input type="reset" name="reset" id="reset" value="重置" />
</label>
</td>
</tr>
</table>
</form>表单里面引入的js文件: function checkNull() {
var flag = true;
var n = document.ModifyForm.newSfzh.value;
var c = document.ModifyForm.confirmSfzh.value;
if(n == ""||n.length==0) {
window.alert("新身份证号码不能为空!");
document.ModifyForm.newSfzh.focus;
flag = false;
} else if (c == ""||c.length==0){
window.alert("确认身份证号码不能为空!");
document.ModifyForm.newSfzh.focus;
flag = false;
} else if(n!=c){
window.alert("两次输入的身份证号码不一致,请检查后再提交!");
document.ModifyForm.newSfzh.focus;
flag = false;
}
if(flag) {
document.ModifyForm.submit();
}
}
var powers=new Array("7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2");
var parityBit=new Array("1","0","X","9","8","7","6","5","4","3","2");
//var sex="male";
//校验身份证号码的主调用
function validId(obj){
var _id=obj.value;
if(_id=="")return;
var _valid=false;
if(_id.length==15){
_valid=validId15(_id);
}else if(_id.length==18){
_valid=validId18(_id);
}
if(!_valid){
alert("身份证号码有误,请检查!");
obj.focus();
return;
}
//设置性别
/*
var sexSel=document.getElementById("sex");
var options=sexSel.options;
for(var i=0;i<options.length;i++){
if(options[i].value==sex){
options[i].selected=true;
break;
}
}*/
}
//校验18位的身份证号码 function validId18(_id){
_id=_id+"";
var _num=_id.substr(0,17);
var _parityBit=_id.substr(17);
var _power=0;
for(var i=0;i< 17;i++){
//校验每一位的合法性 if(_num.charAt(i)<'0'||_num.charAt(i)>'9'){
return false;
break;
}else{
//加权 _power+=parseInt(_num.charAt(i))*parseInt(powers[i]);
//设置性别 if(i==16&&parseInt(_num.charAt(i))%2==0){
sex="female";
}else{
sex="male";
}
}
}
//取模 var mod=parseInt(_power)%11;
if(parityBit[mod]==_parityBit){
return true;
}
return false;
}
//校验15位的身份证号码 function validId15(_id){
_id=_id+"";
for(var i=0;i<_id.length;i++){
//校验每一位的合法性 if(_id.charAt(i)<'0'||_id.charAt(i)>'9'){
return false;
break;
}
}
var year=_id.substr(6,2);
var month=_id.substr(8,2);
var day=_id.substr(10,2);
var sexBit=_id.substr(14);
//校验年份位 if(year<'01'||year >'90')return false;
//校验月份 if(month<'01'||month >'12')return false;
//校验日 if(day<'01'||day >'31')return false;
//设置性别 if(sexBit%2==0){
sex="female";
}else{
sex="male";
}
return true;
}
解决方案 »
- jQuery Validation插件如何?感觉,没自己用jQuery写方便?
- JS弹出保存对话框,并且获得用户选择的路径
- 如何在Mouse点击处,正确显示一个DIV,这个DIV不要超出当前IE窗口.谢谢!
- 怎样获取第一个节点
- 求教js函数为何无法调用,困扰我好久了,快速结贴
- 点击事件问题
- 如何最简洁的代码实现判断只能在textbox中输入1,2,3,4,5这5个整数?
- 请帮我看看我写的JavaScript有什么问题
- 关于表格行制的问题想请问大家
- 请教高手!!! javascript assistant
- 哪个时候用getElementById哪个时候用getElementByName
- 如何完成下面这个表单要求的JS,谢谢
可以尝试使用document.getElementById()
比如:
obj.focus() 改为setTimeout(function(){obj.focus();obj.select();},10);
我在FF3,IE6下测试都没有问题。
把修的代码给你帖出来参考一下吧。
<html>
<script language="javascript">
function checkNull() {
var flag = true;
var obj1 = document.ModifyForm.newSfzh;
var n = document.ModifyForm.newSfzh.value;
var c = document.ModifyForm.confirmSfzh.value;
if(n == ""||n.length==0) {
window.alert("新身份证号码不能为空!");
//document.ModifyForm.newSfzh.focus;
var obj = document.ModifyForm.newSfzh;
setTimeout(function(){obj1.focus();},10); flag = false;
}
else if (c == ""||c.length==0){
window.alert("确认身份证号码不能为空!");
// document.ModifyForm.newSfzh.focus;
var obj = document.ModifyForm.newSfzh;
setTimeout(function(){obj1.focus();},10);
flag = false;
}
else if(n!=c){
window.alert("两次输入的身份证号码不一致,请检查后再提交!");
// document.ModifyForm.newSfzh.focus;
setTimeout(function(){obj1.focus();},10);
flag = false;
}
if(flag) {
document.ModifyForm.submit();
}
}var powers=new Array("7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2");
var parityBit=new Array("1","0","X","9","8","7","6","5","4","3","2");
//var sex="male";
//校验身份证号码的主调用 function validId(obj){
var _id=obj.value; if(_id=="")return;
var _valid=false; if(_id.length==15){
_valid=validId15(_id);
}
else if(_id.length==18){
_valid=validId18(_id);
} if(!_valid){
alert("身份证号码有误,请检查!");
//obj.focus();
setTimeout(function(){obj.focus();},10);
return;
} //设置性别
/*
var sexSel=document.getElementById("sex");
var options=sexSel.options;
for(var i=0; i<options.length; i++){
if(options[i].value==sex){
options[i].selected=true;
break;
}
}
*/
}
//校验18位的身份证号码
function validId18(_id){
_id=_id+"";
var _num=_id.substr(0,17);
var _parityBit=_id.substr(17);
var _power=0;
for(var i=0;i< 17;i++){
//校验每一位的合法性
if(_num.charAt(i)<'0'||_num.charAt(i)>'9'){
return false;
break;
}
else{
//加权
_power+=parseInt(_num.charAt(i))*parseInt(powers[i]);
//设置性别
if(i==16&&parseInt(_num.charAt(i))%2==0){
sex="female";
}
else{
sex="male";
}
}
}
//取模
var mod=parseInt(_power)%11;
if(parityBit[mod]==_parityBit){
return true;
}
return false;
}//校验15位的身份证号码
function validId15(_id){
_id=_id+"";
for(var i=0;i<_id.length;i++){
//校验每一位的合法性
if(_id.charAt(i)<'0'||_id.charAt(i)>'9'){
return false;
break;
}
}
var year=_id.substr(6,2);
var month=_id.substr(8,2);
var day=_id.substr(10,2);
var sexBit=_id.substr(14);
//校验年份位
if(year<'01'||year >'90')return false;
//校验月份
if(month<'01'||month >'12')return false;
//校验日
if(day<'01'||day >'31')return false;
//设置性别
if(sexBit%2==0){
sex="female";
}
else{
sex="male";
}
return true;
}
</script>
<body>
<form id="ModifyForm" name="ModifyForm" method="post" action="***" >
<table width="500px" border="0" align="center">
<td><div align="right">新身份证号:</div></td>
<td colspan="2"><label>
<input name="newSfzh" type="text" id="newSfzh" size="40" onBlur="validId(this)"/>
</label></td>
</tr>
<tr>
<td><div align="right">请确认输入:</div></td>
<td colspan="2"><label>
<input name="confirmSfzh" type="text" id="confirmSfzh" size="40" onBlur="validId(this)"/> </label></td>
</tr>
<tr>
<td height="42"> </td>
<td width="33%"><label>
<input type="button" name="button" id="button" value="提交" onClick="checkNull()"/>
</label>
</td>
<td width="31%"><label>
<input type="reset" name="reset" id="reset" value="重置" />
</label>
</td>
</tr>
</table>
</form>
</body>
</html>