【发布时间】:2012-07-27 18:01:41
【问题描述】:
我正在使用 Jquery 1.7.1 和 iPad1 iOS3。
除非输入元素有焦点,否则我需要在 scrollstart 上触发一个函数。下面的函数工作了很长时间,但突然就不行了(我猜是因为切换到 Jquery 1.7.1)
$(document).on('scroll', function(){
if ( !$("input:focus").length > 0 ) {
self.hideAllPanels();
}
});
具体$('input:focus').length = 0,虽然我可以检测到在滚动事件之前触发的焦点事件。
我一直在摆弄一个解决方法:
if ( !$(document.activeElement).get(0).tagName == "input" ){
....
}
但我不确定 activeElement 何时发生变化,因为即使在我“离开”相应元素之后它似乎也会持续很长时间。
问题:
知道为什么我无法在 iOS 上检测到焦点元素吗?一些提示我如何使用 activeElement 进行设置,所以在模糊中,我不再将输入作为 activeElement 也欢迎!
感谢您的帮助!
【问题讨论】:
-
可能是因为
!的运算符优先级高于>吗?例如,这是否可行:if(!($("input:focus").length > 0)) -
@AlexW:虽然我不确定你的意思,但我想我明白了.... :-) "!beats >" 对吗?从来没想过。让我试试。
-
你是对的。就像数学中的优先级一样,所有 Javascript 运算符都有优先级,可以使用括号覆盖。在下面的答案中,函数在
!运算符之前进行评估,因此它不再是!与>的问题。 -
啊……数学……谢谢你的解释!
标签: javascript jquery ios input focus