我写了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== ' ') ">