SSブログ

【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 でフィックスされたそうです。

 


この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。