У меня есть небольшая функция, которая позволяет обрабатывать всплывающие окна на моей странице, и есть небольшая проблема с clearTimeout. Пожалуйста, взгляните на код:
function toggleModal(et, delayed) {
if(et.hasClass('acc-edit-fn')) {
if($.browser.msie) {$('#opacity-modal').height($(document).height()).toggleClass('acc-edit-fn');
}
else {$('#opacity-modal').height($(document).height()).toggleClass('acc-edit-fn').fadeTo('fast', 0.5);
}
et.html($(this).html()).toggleClass('acc-edit-fn');
if(delayed > 0) {
var dtf = setTimeout(function(){et.toggleClass('acc-edit-fn'); }, delayed);
var dts = setTimeout(function(){$('#opacity-modal').toggleClass('acc-edit-fn').removeAttr('style');}, delayed);
}
}
else {
$('#opacity-modal').toggleClass('acc-edit-fn').removeAttr('style');
et.toggleClass('acc-edit-fn');
clearTimeout(dtf);
clearTimeout(dts);
}
};
Так что в основном, если вы вызываете func с "delayed"> 0, он будет вызывать автоматическое закрытие после определенного значения. Но если во всплывающем окне есть кнопка, которая позволяет закрыть ее перед таймером, всплывающее окно появится сразу после запуска таймера. Я попытался очистить таймауты с помощью clearTimeout(), но ошибка все еще существует. Вы можете проверить это на скрипке здесь: http://jsfiddle.net/LvVu9/ просто нажмите красную кнопку, а затем нажмите кнопку "ОК".
dtf
и dts
оба выходят за рамки (где вы выполняете clearTimeout
). Таким образом, вы можете определить эти глобальные.
Что-то вроде того:
var dtf = null;
var dts = null;
function toggleModal(et, delayed) {
if(et.hasClass('acc-edit-fn')) {
if($.browser.msie) {$('#opacity-modal').height($(document).height()).toggleClass('acc-edit-fn');
}
else {$('#opacity-modal').height($(document).height()).toggleClass('acc-edit-fn').fadeTo('fast', 0.5);
}
et.html($(this).html()).toggleClass('acc-edit-fn');
if(delayed > 0) {
dtf = setTimeout(function(){et.toggleClass('acc-edit-fn'); }, delayed);
dts = setTimeout(function(){$('#opacity-modal').toggleClass('acc-edit-fn').removeAttr('style');}, delayed);
}
}
else {
$('#opacity-modal').toggleClass('acc-edit-fn').removeAttr('style');
et.toggleClass('acc-edit-fn');
clearTimeout(dtf);
clearTimeout(dts);
}
};
установить как глобальную переменную
var dtf,dts;
if(dtf){
clearTimeout(dtf);
}
if(dts){
clearTimeout(dts);
}