在setTimeout中传递$(this)

时间:2011-03-23 18:18:08

标签: jquery jquery-ui

如何将$(this)作为参数传递给setTimeout函数(方法?)? 以下是我到目前为止所做的工作:

var Variables = {};
Variables.ResizeTimer = false;
Variables.$obj = null;

$('.draggable').resize(function() {
    if (Variables.ResizeTimer !== false) { 
        clearTimeout(Variables.ResizeTimer);
    }
    Variables.$obj = $(this);
    Variables.ResizeTimer = setTimeout(mySizer,
        1000
    );
});

3 个答案:

答案 0 :(得分:6)

试试这个:

    Variables.$obj = $(this);
    Variables.ResizeTimer = setTimeout(
         function(){
             mySizer(Variables.$obj);
         },
         1000
    );

来自MPD

要详细说明,请阅读Javascript闭包

答案 1 :(得分:5)

由于Variables看起来是全局的,您可以在mySizer例程中使用它。如果您不想拥有全局变量,可以创建closure

$('.draggable').resize(function() {
    if (Variables.ResizeTimer !== false) { 
        clearTimeout(Variables.ResizeTimer);
    }
    var $this = $(this);
    Variables.ResizeTimer = setTimeout(function() {
        mySizer($this);
    }, 1000);
});

答案 2 :(得分:2)

由于还没有人提及它:如果您只需要$(this)执行与效果相关的操作,您可能只需使用delay函数而不是setTimeout。< / p>

$('#some_element').click(function() {

    $(this).delay(2000).fadeIn(); // After 2 seconds, start a fade-in
}

还可以向fadeIn添加函数调用(例如)。这很有用,实际上取决于你的特定用例,但如果它适用于你的情况,它可能会使事情变得容易很多。

希望这会对某人有所帮助......