【问题标题】:how to use Jquery :focus selector on input elements in iOS?如何在 iOS 中的输入元素上使用 Jquery :focus 选择器?
【发布时间】: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


【解决方案1】:
$(document).on('scroll', function(){
   if (!$("input").is(':focus')) {  
       self.hideAllPanels();
   }
});

这似乎对我有用,但如果输入元素没有焦点,它将在滚动期间多次触发该函数。

【讨论】:

  • 我想我可以在滚动过程中多次开火。只是在 iPad 上,当点击输入时键盘跳起来会触发滚动事件,除非我抓住我关注的输入,否则它会触发我的隐藏例程。
猜你喜欢
  • 2018-06-23
  • 1970-01-01
  • 1970-01-01
  • 2019-05-21
  • 1970-01-01
  • 2014-06-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多