iOS 7 onchange 事件在 iPad 3+Mini 中被破坏 // 需要解决

Posted

技术标签:

【中文标题】iOS 7 onchange 事件在 iPad 3+Mini 中被破坏 // 需要解决【英文标题】:iOS 7 onchange event is broken in iPad 3+Mini // Need work around 【发布时间】:2013-09-23 19:32:10 【问题描述】:

请仅在运行 ios 7 的 iPad 上进行测试

ios 7 似乎不支持 iPad 上的 onchange 事件的 alert() 和 confirm()。奇怪的是,它适用于运行 ios 7.0 的 iPhone 4s 和桌面浏览器,但不适用于运行 ios 7.0 的 ipad 3 或 ipad mini。它会触发对话框,当单击它会使按钮变暗(就像单击它一样),然后浏览器冻结。在 iOS 7 iPad 和 iPad mini 上运行的 Safari 和 chrome 中都会发生。

任何指针将不胜感激。已经尝试过 onblur 和 onkeypress 没有成功:-/

Options
<select id="iCard" onchange="alert('It worked.')">
    <option value="0" selected="selected">(none)</option>
    <option value="1">Option 1</option>
    <option value="2">Option 2</option>
    <option value="3">Option 3</option>
    <option value="4">Option 4</option>
</select>

问题可以在这里看到(确保在运行 iOS 7 的 iPad 上测试它):http://jsfiddle.net/sethsanders/MvSxm/

【问题讨论】:

一些关于 iOS7 中的重大更改的 cmets - 还指出警报、确认和提示在全屏 Web 应用程序中不起作用:mobilexweb.com/blog/safari-ios7-html5-problems-apis-review 希望您不必等待更新 感谢 Adam,我在研究这个问题时看到了那篇文章。但是,我们不会将其作为主屏幕 Web 应用程序运行。它只是像上面的 jsFiddle 一样通过 safari(或 Chrome)运行。 【参考方案1】:

解决方法在这里http://jsfiddle.net/sethsanders/ZzkBd/

IE7 需要一个 setTimeout 来处理卡住的事件处理程序

function SetCard(sel) 
   setTimeout(function()  alert('SetCard called successfully.');,10);
   document.getElementById("msg").innerHTML=sel.value + ":" + sel.options[sel.selectedIndex].text;

【讨论】:

【参考方案2】:

显然这只是 iPad 上的 iOS7 错误。

iPad 上的 HTML 选择看起来像是选择时的弹出窗口(iOS 开发人员使用 popover 概念)。

我确定重点在于两个模式控件的冲突——选择的弹出窗口和确认/警报。 IE。确认/警报出现在选择的弹出窗口仍然可见的时候,这会锁定确认/警报。

在您的 onchange 事件中确实发生了这种情况。

setTimeout 在这种情况下会有所帮助:

<select id="iCard" onchange="setTimeout(function() alert('It worked.'); )">

【讨论】:

以上是关于iOS 7 onchange 事件在 iPad 3+Mini 中被破坏 // 需要解决的主要内容,如果未能解决你的问题,请参考以下文章

iOS 7.0.3 - 在 iPad 3 上表现糟糕,但在模拟器中表现出色

如何在 IOS 6.0(Iphone) 中通过 jquery 为混合应用程序关闭选择器的 onchange 事件下拉列表

iPad IOS html表单选择在触摸时无法打开

为啥在 iOS Safari Mobile (iPhone / iPad) 中没有触发模糊事件?

react input 输入中文拼音和onChange事件的交互

antd pagination onchange 事件不触发,pagination onchange分页请求内容不正确。