我正在为 iOS 开发混合(网络+ native )应用程序。应用程序的 Web 部分是 WKWebView(位于 UINavigationController 上)中的 SPA。该网站有一个<select>
带有 onchange
的元素/onblur
处理程序。当用户点击 <select>
元素, native 选择器轮出现。然后,当用户点击 native 选择器的完成按钮时,onchange
和 onblur
处理程序立即被解雇。这一切都按预期工作。
由于这是一个混合应用程序,有时应用程序会将 View Controller 推送到 UINavigationController(在 WebView 之上)。当弹出该 View Controller 并将焦点返回到 Web View 时,一切似乎都像以前一样工作。
然而,<select>
元素现在只会触发 onchange
和 onblur
当用户点击离开 元素时的事件。如果用户更新他们的选择并点击完成,选择器将关闭但选择元素的值保持不变。只有在元素外部点击后,值才会更新并且 onchange
/onblur
事件触发。
新 View Controller 何时被推送和弹出并不重要,即使它在 <select>
之前元素尚未创建。如果在 web view 生命周期的任何时候它被一个新的 View Controller 覆盖,这个错误将在 100% 的时间内发生,直到 web view 被销毁。
示例代码(这里没什么特别的):
HTML:
<select id="mySelect">
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
</select>
JS:
document.getElementById("mySelect").onchange = function() {
console.log("hello");
}
此问题仅发生在 iOS 11 和 12 上。它是 Mobile Safari 特有的错误吗?任何帮助将不胜感激。
最佳答案
我最近发现,如果您将 optgroup
添加到选择中,事件似乎会正确触发。我一直在将空的附加到选择中,这似乎暂时有效。
关于javascript - 当 iOS 11 Webview 失去焦点时,HTML <select> 停止触发 onchange 或 onblur,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53048487/