2013-11-23 54 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); 
});