2011-08-11 62 views
19

正如你可能知道的那样,有一个相对简单的方法,或多或少地可靠,detect whether Caps Lock is on,特别是当用户开始输入密码字段时。但是,IE10自动支持此功能是一个不为人知的事实,无需任何其他编码(source,direct link to screenshota simple demo)。因此,现在我面临一个问题,因为如果我添加一个类似的Javascript功能,IE10用户会看到两个带有警告的“泡泡”,一个是由我的脚本创建的,另一个是由他们的浏览器创建的;这可能看起来很丑,甚至会令人困惑。这就是为什么我正在寻找一种解决方案来检测浏览器是否具有内置的功能;我希望它能触发某些事件或改变一些属性,但我还没有发现任何这样的事情。有没有办法检测IE10的“Caps Lock is on”功能?

我可能只是在用户代理字符串中寻找Trident/6.0,但我宁愿避免浏览器检测;如果其他浏览器添加了类似的功能,它可能还需要一些代码维护。

如果没有可靠的解决方案,我会要求IE团队添加“caps-lock-on-on feature”检测功能,也许还需要HTML规范的编辑来要求供应商执行此操作。

+2

没有为揭露这种默认行为还没有标准。所以没有办法进行功能测试,所以用户代理匹配是唯一的方法。或者你可以尝试将你的泡泡放在默认泡泡的下方(假设浏览器泡泡始终位于顶部),所以它被阻止并且不可见 – Gerben

+0

@Gerben感谢您的评论。看起来你的总结可以很好地描述当前的状态和可能的解决方案,可以随意添加你的答案作为答案;如果没有出现任何魔法解决方案,我可能会将其设置为已接受。 – duri

+0

设置包含窗体上的'novalidate'属性是否对气球行为有任何影响?该文档似乎表明,这将禁用内置的验证功能 - 虽然目前还不清楚这是表单提交时还是禁止内联检查元素... – Fraser

回答

-1

您可以捕获键盘事件并检测密钥,但无法确定大写锁定状态。

+0

感谢您对回答问题的兴趣。但是,你似乎误解了这个问题。请仔细阅读。我在检测Caps Lock时没有任何问题,我正在寻找一种方法来确定是向用户显示警告还是由浏览器自行完成。 – duri

1

我建议你结帐本教程 http://www.upsdell.com/BrowserNews/res_sniff.htm

你可以尝试这样的事情

<!--[if gte IE 10]> 
    <script type="text/javascript"> 
     var isTrulyIE = true; 
    </script> 
<![endif]--> 

或检测和原型设计的浏览器版本JavaScript版本

this.isIE10 = (this.version == "10.0") || (this.ua.indexOf("trident/6") != -1); 

,你也可以尝试由微软定义的脚本决定IE浏览器版本 http://support.microsoft.com/kb/167820

+5

我被告知IE10不再支持条件注释? –

+0

然后,我建议你尝试JavaScript的三叉戟/ 6像他们是如何在这里http://support.microsoft.com/kb/167820 – Njax3SmmM2x2a0Zf7Hpd

相关问题