Javascript语法
for(i in x)
{
x[i].focus();
}
这在Mozilla和Chrome中正常运行但在IE中出错。
显示的错误是
消息:无法将焦点移动到控件,因为它是不可见的,未启用的,或者是不接受焦点的类型。
我尝试使用try catch block,如下所示
for(i in x)
{
try { x[i].focus(); }
catch(err){ }
}
它工作正常,但我的系统有超过100页,不知道我使用了多少次.focus
请帮我摆脱这个IE问题。
答案 0 :(得分:3)
当您尝试聚焦()无法获得焦点的元素(如错误所示)时,会发生此错误。要摆脱它,实现一个方法,在调用焦点元素之前进行必要的检查。 E.g。
function focusElement(el) {
var canFocus = !el.disabled &&
el.style.display != 'none' &&
el.style.visibility != 'hidden';
if (canFocus) el.focus();
return canFocus;
}
...然后你的代码看起来像:
for (i in x) focusElement(x[i]);
(顺便说一下,'看起来很奇怪你一次会聚焦()多个元素,因为只有最后一个元素会留下焦点。)
答案 1 :(得分:0)
这可能是因为for(i in x)也将返回x对象的所有其他属性。
因此,如果这是一个数组,它也将返回长度,并且代码将尝试在不存在的整数上调用'focus()'。
我会修改代码以首先检查焦点方法的存在。
所以: for(i in x){if(x [i] .focus){x [i] .focus(); }}
您也可以添加try / catch。