这适用于移动网络应用,而非本机。
我有一个关闭模糊事件的自动完成下拉列表。但是我希望在用户关闭移动设备上的键盘时防止这种情况发生(即自动完成下拉列表应该保持可见)。有没有办法区分键盘关闭造成的模糊事件和其他类型的模糊事件?我可以防止因在移动设备上关闭键盘而导致的模糊事件吗?
答案 0 :(得分:1)
好的,首先我会建议检查您的图书馆'文档,因为他们可能会在他们的API中提供一些东西,尽管我没有意识到这一点。这是Web Apps的缺点:您无法访问本机功能。
如果你真的想要这样做,这里有一个可能的解决方案。这很难看,但它可能会奏效。
Container on tap function (event)
If !autocomplete return // if you cant see the popup do nothing and blur normally
If (event.target != inputID) AND (event.target != autocID)
CloseAutocomplete()`
基本上,不是在模糊时关闭自动完成,而是在用户点击父容器时关闭它,而不是在输入本身或自动完成时关闭它。根据其工作原理,您可以将其扩展以检查屏幕上的任何点击。
答案 1 :(得分:0)
我看到你标记了iOS ...你可以通过UIKeyboardWillHideNotification观察键盘事件。 [https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIWindow_Class/index.html#//apple_ref/c/data/UIKeyboardWillHideNotification]你可能不得不做异步延迟来使用onblur捕获该事件。
如果你真的想要阻止所有“其他类型的模糊事件”,你可以让你的下拉关闭特定事件(而不是模糊)。例如:单击另一个字段时,导航,和/或在该下拉控件旁边添加一个“x”关闭按钮。
答案 2 :(得分:0)
在blur事件侦听器中,测试event.relatedTarget === null。如果焦点已移动到另一个元素,则event.relatedTarget将引用该元素,但如果没有焦点(如果模糊的原因是键盘关闭的情况),则event.relatedTarget将为null。