日期:2014-05-16  浏览次数:20517 次

我写了code让IE死锁了,遨游下运行OK,急~~~~~~~~~~~~
我有个函数validateChar,用于检查input域中是否包含非法字符(除ascii码外的所有值为非法)。调用onblue时调用该方法,如果有非法的字符,把select当前input的value。

问题:我有两个input域,都含有中文,互相之间争夺焦点(focus),IE下产生了死锁。mathon(遨游)下OK。不知道怎么办了,很急。谢,我谢谢您了!

==============================
<script>
function   validateChar(obj){
if(obj.value   ==   " ")   return   true;
hasInvalidChar   =   false; //   reset   hasInvalidChar值
var   exp   =   /[^\x00-\xff]/g //   匹配所有非ascii码的正则表达式
obj.value   =   obj.value.replace(/[\u3000]/,   "   "); //   替换全角空格为   ascii码空格
var   objValue   =   obj.value; //   表单域obj的value
var   invalidChars   =   " "; //   非法字符组成的字符串
var   expForReplace; //   替换非法字符的正则表达式
var   charIndex   =   ((objValue).search(exp)); //   查找非法字符,并返回所在索引index


//   如果存在非法字符就while循环
while(charIndex   !=   -1){
invalidChars   +=   objValue.charAt(charIndex)+   "   "; //   累加非法字符
expForReplace   =   new   RegExp(objValue.charAt(charIndex),   "g ");
objValue=objValue.replace(expForReplace,   " "); //   将非法字符替换为 " ",以便search到下一个非法字符
charIndex   =   ((objValue).search(exp));
}

//   如果存在非法字符
if(invalidChars!= " ")   {  
alert( "字符输入错误:\n\n原因:您输入的字符中包含如下非法字符   \ "   "   +   invalidChars   +   "\ "\n解决:请检查您的输入法是否为英文状态 ");
hasInvalidChar   =   true;
obj.select();
return   false;
}
return   true;
}
</script>
<input   name= 'txt1 '   value= "我的 "   onblur= "validateChar(this) "   />
<input   name= 'txt2 '   value= "钱 "   onblur= "validateChar(this) "   />

------解决方案--------------------
抢焦点的死循环:

解决方法1:
要求所有的默认值(包括初始值/script赋值)合法

解决方法2:
ie里用onbeforedeactivate:
<input onbeforedeactivate= "return (this.value== '1 ' || this.value== ' ') ">