以下代码适用于所有浏览器,包括 Mac 上的 Safari,但 iPhone 上的 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 不能防止错误的任何想法,就像其他浏览器似乎一样?
以下是回答以下回复的两个相关函数的完整代码:(使用解决方案编辑)
// 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
之后立即不会执行。