IE中的Javascript .focus问题用于动态内容

时间:2011-04-15 10:28:55

标签: javascript internet-explorer focus

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问题。

2 个答案:

答案 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。