Javascript .setTimeout()如何引用一个函数

时间:2013-11-23 03:16:54

标签: javascript jquery

我有这些代码:

$(function(){
    $('.btn').click(function(){
        $title = $(this).attr('title');
        $.get('getOutput', {}, function(){
            // success ajax get                
            // how to refer again to this function? Doing again the $('.btn').click event
            setTimeout(// $('.btn').click(), 100);
        });
    });
})

我想重复按钮的点击事件。但我的主要问题是,你如何在setTimeout() ??

中引用正确的函数或事件

4 个答案:

答案 0 :(得分:2)

您可以将其包装成匿名函数。

setTimeout(function() {
    $('.btn').click();
}, 100);

如果你想在之前点击过的特定元素中触发事件,你需要将当前元素存储在一个变量中,因为匿名函数中的this值会有所不同。

$('.btn').click(function() {
    var $el = $(this);
    // ...your code...
    setTimeout(function() {
        $el.click();
    }, 100);
});

答案 1 :(得分:0)

你可以在匿名函数中包含超时回调,然后真正调用那里的click函数。

setTimeout(function() { 
    $(".btn").click(); 
}, 100);

答案 2 :(得分:0)

您可以将匿名函数中的this$.proxy()绑定,以与IE8兼容,或者使用.bind()代替现代浏览器。

setTimeout($.proxy(function(){
    // this.click(); // if this = $(".btn")
}, this), 100);

要正确解释:

$(function(){
    var btn = $('.btn');

    btn.click(function(ev){
        var el = $(ev.currentTarget), // same as $(this) but too many "thisses" can be confusing ^^
            title = el.prop('title');

        $.get('getOutput', {}, function(){
            // success ajax get
            // how to refer again to this function? Doing again the $('.btn').click event
            setTimeout($.proxy(function(){
                this.click();
            }, el), 100);
        });
    });
});

答案 3 :(得分:0)

您可能最好再点击点击事件处理函数并在setTimeout内再次调用它,而不是再次触发点击事件。

var handleButtonClick = function() {
    $title = $(this).attr('title');
    $.get('getOutput', {}, function() {
        // success ajax get    
        setTimeout(handleButtonClick , 100);
    });
};

$(function() {
    $('.btn').click(handleButtonClick);
});