次のコードは、iPhone の Safari を除いて、Mac の Safari を含むすべてのブラウザで正しく機能します。
次のように定義されている、潜在的に実行されている可能性のあるタイマー オブジェクトがあります。
//delay background change until animation is finished
lastTimer = setTimeout(function () {
$('#' + targetDiv).removeClass('open');
}, 150);
後で、タイマーが動作しているかどうかを確認し、動作している場合はキャンセルする必要があります。私が使用しているコードは次のとおりです。
if (lastTimer != null) { clearTimeout(lastTimer); }
これは、IOS Safari が JavaScript エラーを生成する場所です。
"ReferenceError: 変数が見つかりません: lastTimer".
他のブラウザーのように、null のチェックがエラーを防止しない理由について何か考えはありますか?
以下の返信に対する2つの関連する関数の完全なコードは次のとおりです:(解決策で編集)
// Class for handling the animations for the drop down menus
var dropDownMenu = {
lastTimer: null,
openMenu: function (targetDiv) {
if (targetDiv != null) {
var targetHeight = $('#' + targetDiv).height();
$('#' + targetDiv).stop(true); //stop an previous animations and clear queue
if (this.lastTimer != null) { clearTimeout(this.lastTimer); } //stop possible pending timer to prevent background change
console.log("testing b");
$('#mainNavigation #dropDownMenu ul').removeClass('open'); // make sure all closed menus show corrent bgd
$('#' + targetDiv).animate({
bottom: -(targetHeight + 30)
}, 200, 'swing');
$('#' + targetDiv).addClass('open');
}
},
closeMenu: function (targetDiv) {
if (targetDiv != null) {
$('#' + targetDiv).stop(true); //stop an previous animations and clear queue
$('#' + targetDiv).animate({
bottom: 0
}, 200, 'swing');
//delay background change until animation is finished
this.lastTimer = setTimeout(function () {
$('#' + targetDiv).removeClass('open');
}, 150);
}
}
}
iOSでエラーが発生すると、実行が停止し、console.log
直後のテストが実行されません。