IE正常,Firefox出现问题

roader2046 2008-10-27 01:29:27
2个文本域,第二个是重复输入第一个中的内容即确认第一个文本域的内容,两者相同且正确可以提交,我在这2个文本域中添加了onBlur事件,用来判断2个文本域的内容是否符合要求,在提交按钮上加了onClick时间,执行判断是否为空跟第二个值是否和第一个相等,在IE情况下完全符合我的要求,我的时间调用函数写的没有问题,但是在Forefox下出现问题:
当我在第一个文本域中输入不符合要求数据时,鼠标点击第二个文本域时,弹出错误提示,至此,还符合要求,但是点击掉错误提示之后光标可以定位到第二个文本框里面了,再在第二个文本框中输入和第一个文本框一直的数据时(2个文本框中的数据都是不符合要求的,但是2者一直),再点击提交是可以提交的,而在IE下,当第一个数据不符合要求时是不可以定位带第二个文本域的,会一直报错,请问forefox怎么调整到IE这样的功能?

额,不知道说清楚了没。。。。
...全文
139 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
roader2046 2008-11-01
  • 打赏
  • 举报
回复
额,我一直以为是上面的问题,原来是下面身份证验证那边的那个focus()问题,改成8楼那样就可以了,谢谢大家了!~
不悲不喜 2008-10-30
  • 打赏
  • 举报
回复
你的测试环境是什么?
我在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>
roader2046 2008-10-29
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 syukugai 的回复:]
像下面这样改一下。
比如:
obj.focus() 改为

JScript code
setTimeout(function(){obj.focus();obj.select();},10);
[/Quote]
貌似还是不行哦~哎~
不悲不喜 2008-10-28
  • 打赏
  • 举报
回复
像下面这样改一下。
比如:
obj.focus() 改为

setTimeout(function(){obj.focus();obj.select();},10);
roader2046 2008-10-27
  • 打赏
  • 举报
回复
有人帮忙解决下吗?
roader2046 2008-10-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 MOTA 的回复:]
不要使用 document子节点
可以尝试使用document.getElementById()
[/Quote]
修改了,还是没有解决:(
MOTA 2008-10-27
  • 打赏
  • 举报
回复
不要使用 document子节点
可以尝试使用document.getElementById()
roader2046 2008-10-27
  • 打赏
  • 举报
回复
请各位帮帮忙,第一次做项目,不能半途而废...
roader2046 2008-10-27
  • 打赏
  • 举报
回复
果然没说清楚...囧..
呵呵,分步说明:
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;
}
xiaojing7 2008-10-27
  • 打赏
  • 举报
回复
没清楚
梅子 2008-10-27
  • 打赏
  • 举报
回复
哇。。。好乱哦。。。能不能贴代码?

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧