防止键盘关闭时出现模糊事件

Prevent blur event on keyboard close

这适用于移动网络应用程序,而非本机应用程序。

我有一个在模糊事件时关闭的自动完成下拉菜单。但我想防止这种情况在用户关闭移动键盘时发生(即自动完成下拉菜单应保持可见)。有没有办法区分键盘关闭和其他类型的模糊事件引起的模糊事件?我可以防止因关闭移动键盘而导致的模糊事件吗?

好的,首先我会建议您查看您的库的文档,因为它们可能会在 API 中提供一些内容,尽管我不知道什么。这就是 Web 应用程序的缺点:您无法访问本机功能。

如果您仍然真的想这样做,这里有一个可能的解决方案。这很丑陋,但它可能会起作用。

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()`

本质上,不是在模糊时关闭自动完成,而是在用户点击您的父容器时关闭它,而不是在输入本身或自动完成上。根据它的工作方式,您可以扩展它以检查屏幕上的任何点击。

我看到你被标记了 iOS...你可以使用 UIKeyboardWillHideNotification 观察键盘事件。 [https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIWindow_Class/index.html#//apple_ref/c/data/UIKeyboardWillHideNotification]不过,您可能必须执行异步延迟才能使用 onblur 捕获该事件。

如果您真的想阻止所有 "other kinds of blur events" 您可以让您的下拉菜单关闭特定事件(而不是模糊)。例如:单击另一个字段时,导航 and/or 在该下拉控件旁边添加一个 'x' 关闭按钮。

在模糊事件侦听器中,测试 event.relatedTarget === null。如果焦点已移动到不同的元素,event.relatedTarget 将引用该元素,但如果没有焦点(如模糊的原因是键盘关闭时的情况),event.relatedTarget 将为 null .