clearTimeout()不起作用

时间:2014-05-23 06:22:26

标签: jquery cleartimeout

我有一个小功能可以处理我页面上的弹出窗口,而且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);
        }
    };

所以基本上如果你用#34延迟调用func" > 0,定义值后调用自动关闭。但是,如果弹出窗口中有任何按钮允许在定时器之前关闭它,则会在执行定时器后立即显示弹出窗口。我已尝试使用clearTimeout()清除超时,但bug仍然存在。您可以在此处查看它:http://jsfiddle.net/LvVu9/只需单击红色按钮,然后单击"确定"按钮。

2 个答案:

答案 0 :(得分:2)

dtfdts都超出了范围(您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);
        }
    };

答案 1 :(得分:0)

设为全局变量

var dtf,dts;

    if(dtf){
            clearTimeout(dtf);
            }
            if(dts){
            clearTimeout(dts);
            }