【问题标题】:How to detect if browser supports focus on disabled elements?如何检测浏览器是否支持关注禁用元素?
【发布时间】:2012-11-24 17:39:09
【问题描述】:

无法将焦点移至控件,因为它不可见、未启用或属于不接受焦点的类型

jQuery 在 IE8 上抛出了上述错误。

我希望能够检测浏览器是否支持对禁用元素的关注(在我的情况下为 input),并将其存储在 jQuery.support 中。

我该怎么做?

简单的 JS 解决方案可以,但我不想使用浏览器嗅探(jQuery.browser 等)。

使用dispatchEvent() 会是一个好方法吗?

【问题讨论】:

  • 你的意思是禁用<input>元素?
  • 有什么理由不想在设置焦点之前检查控件是否可见并启用?
  • @ArsenMkrt 在其他浏览器中这工作正常。焦点触发了第三方的东西,所以我不想检查它是否可见。除非我进行浏览器嗅探,否则这将阻止在其他浏览器中的使用。另外,我更愿意在页面加载时进行检查并将结果存储在jQuery.support
  • 您使用的是什么版本的 jQuery?我似乎无法让它在 1.8.2 中对禁用的元素抛出上述错误。
  • @KevinB 我使用的是 1.7.2。我会试试 1.8.2

标签: javascript jquery internet-explorer-8 focus feature-detection


【解决方案1】:

我想你可以只是 trycatch 完全一样(关注禁用的元素),并在 support 中存储一个值(如果有任何问题)。

var test = $('<input disabled/>');
$(document.body).append(test);
try{
    test.focus();
}catch(e){
    //no support, do your thing
    //...
}
//clean up test element
test.remove();

【讨论】:

  • 大声笑..我自己想不出其他任何东西,但害怕发布解决方案,因为害怕 SO 批评者的愤怒..大声笑..你很好..+1
  • 为什么不去下一层呢?我可以尝试使用dispatchEvent()吗?
  • @AdamLynch 为什么要降级?您当然可以尝试,但我不明白这一点,因为在 focus() 的代码中某处看到这已经发生了。
  • 也许会更快(我不确定这是不是真的)。就像使用 $('#id').find('.class') 比使用 $('#id .class') 更快一样,因为 jQuery 最终决定它应该在一段时间后使用前者。
  • @AdamLynch 这是一次检查,而不是迭代。它最多可以将您的性能提高一到两毫秒。
猜你喜欢
  • 1970-01-01
  • 2013-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-05
  • 2011-12-12
  • 2011-09-07
相关资源
最近更新 更多