2013-11-23 55 views
0

我有这些代码:
的Javascript .setTimeout()如何引用函数

$(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()中的正确功能或事件?

回答

2

你可以把它包装成一个匿名函数。

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

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

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

但我有很多元素,比如'$(“ BTN”)' 它可能会搞不清楚它会尝试要什么有什么元素来选择。 – user2975385

+0

@ user2975385我已编辑了关于您的问题的答案。 ;) –

+0

确实100毫秒没有问题? ( ,因为你知道我有这样的ajax电话,不会是滞后吗? 这个答案工作,代码工作,但是当我尝试打开很多,它给了滞后。 – user2975385

0

你可以把超时回调包装在一个匿名函数中,只需要真正调用那里的点击函数即可。

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

您可以绑定this匿名函数内部与$.proxy()是兼容IE8或使用.bind()现代的browers。

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); 
     }); 
    }); 
}); 
+0

我认为它在这种特定情况下不起作用,因为范围在他的'$ .get'回调中已经不同了,它不会引用他的元素 –

+0

因此,评论'如果这是$(“。btn”)''但是可能没有这么清楚的解释 –

+0

当然,使用这种方法只有在事情变得更加复杂的时候才有用,在你的例子中它可能不是b这种情况。 –

0

再次触发click事件相反的,你可能会更好命名click事件处理函数,并从setTimeout内再次调用它。

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

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