【Tips】iPad で select.onchange 中に alert や confirm でフリーズする問題を回避 [iOS]
iOS 7.0.2 に見られた厄介な不具合の回避方法です。
iOS 7.0.2 Safari Mobile では、select タグの onchange イベントハンドラー内で JavaScript の alert や confirm を実行すると、ユーザーが応答した瞬間にフリーズします。
この問題を回避するには、alert や confirm を select.onchange イベントの期間の後で実行します。
まず select.onchange イベントハンドラーでタイマーだけを仕掛けてイベントから抜けておき、タイマーイベントで alert や confirm を実行したい処理を起動するようにします。
$(function() {
$("select[id='id']").bind("change", null, function() {
setTimeout(function() {
if (confirm(message)) {
...
}
else {
...
}
}, 100);
});
});
タイマーイベントが発生する前のなんらかのコンテキストをタイマーイベントハンドラー内の処理で取得したい場合には、クロージャを活用すると便利です。
なお、この不具合は iOS 7.0.3 でフィックスされたそうです。