Ich habe diese Codes:

$(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);
        });
    });
})

Ich möchte das Klickereignis der Schaltfläche wiederholen. Aber meine Hauptfrage ist, wie würden Sie die richtige Funktion oder das richtige Ereignis in setTimeout() verweisen?

0
user2975385 23 Nov. 2013 im 07:16

4 Antworten

Beste Antwort

Sie können es in eine anonyme Funktion einbinden.

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

Wenn Sie das Ereignis in dem bestimmten Element auslösen möchten, auf das Sie zuvor geklickt haben, müssen Sie das aktuelle Element in einer Variablen speichern, da der Wert this in der anonymen Funktion unterschiedlich wäre.

$('.btn').click(function() {
    var $el = $(this);
    // ...your code...
    setTimeout(function() {
        $el.click();
    }, 100);
});
2
Guilherme Sehn 23 Nov. 2013 im 04:15

Anstatt das Klickereignis erneut auszulösen, ist es möglicherweise besser, die Klickereignishandlerfunktion zu benennen und sie erneut aus Ihrem setTimeout heraus aufzurufen.

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

$(function() {
    $('.btn').click(handleButtonClick);
});
0
Alex K 23 Nov. 2013 im 03:58

Sie können den Timeout-Rückruf in eine anonyme Funktion einbinden und dort einfach die Klickfunktion aufrufen.

setTimeout(function() { 
    $(".btn").click(); 
}, 100);
0
Roy M J 23 Nov. 2013 im 03:25

Sie können this innerhalb der anonymen Funktion mit $.proxy() binden, um mit IE8 kompatibel zu sein, oder .bind() für moderne Browser verwenden.

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

Um es richtig zu erklären:

$(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
Tim Vermaelen 23 Nov. 2013 im 03:43