javascript - 当 iOS 11 Webview 失去焦点时,HTML <select> 停止触发 onchange 或 onblur

标签 javascript html ios wkwebview

我正在为 iOS 开发混合(网络+ native )应用程序。应用程序的 Web 部分是 WKWebView(位于 UINavigationController 上)中的 SPA。该网站有一个<select>带有 onchange 的元素/onblur处理程序。当用户点击 <select>元素, native 选择器轮出现。然后,当用户点击 native 选择器的完成按钮时,onchangeonblur处理程序立即被解雇。这一切都按预期工作。

由于这是一个混合应用程序,有时应用程序会将 View Controller 推送到 UINavigationController(在 WebView 之上)。当弹出该 View Controller 并将焦点返回到 Web View 时,一切似乎都像以前一样工作。

然而,<select>元素现在只会触发 onchangeonblur当用户点击离开 元素时的事件。如果用户更新他们的选择并点击完成,选择器将关闭但选择元素的值保持不变。只有在元素外部点击后,值才会更新并且 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/

相关文章:

javascript - 如何通过 css 或 javascript 甚至使用 jquery 在 html 中扩展悬停的缩写词?

ios - 使用 Stripe SDK 处理信用卡

ios - 如何判断 NSLayoutConstraint 是水平的还是垂直的?

javascript - 添加超链接的数据格式化程序不起作用

javascript - 如何将 HTML 表单数据存储到特定文件夹中的 csv 文件?

javascript - JS 特定结束日期计算器

javascript - OAuth 登录对第二台设备有效

javascript - 如何用js获取内联元素高度,比如span元素?

javascript - 在按键 JavaScript 上调用 Enter 事件

ios - 在 iOS 7 上以编程方式安装 .mobileconfig 文件