2017-03-19 3 views
0

Ich habe Probleme herauszufinden, wie die $("identifier").remove mit setTimeout() funktioniert. Herunterfallen Der folgende Code versucht, eine SchneeflockejQuery setTimeout() Callback funktioniert nicht

//construct a html string 
    var html_str = "<img class='snowflakes' src = 'snowflake1.png' style='position: absolute; left: " + String(pos_x) + "px'> " 

    //Append the element to field 
    var flake = $(html_str).appendTo('#field'); 

    flake.animate({top: String(FIELD_SIZE-FLAKE_SIZE)+'px'}, 
        drop_speed, 

        //callback function when finished animating 
        function(){ 
         setTimeout(function(){flake.remove();},1000); 
        } 
    ); 

ich nicht bekommen, wie

setTimeout(function(){flake.remove();},1000); //this works 
    setTimeout(flake.remove,1000); //but this doesn't remove the element 

es mir zu beleben schien beide die gleiche Funktion erfüllen soll. Was geht hier vor sich?

+2

nennen beide den gleichen '.remove()' Funktion , aber mit unterschiedlichen Werten für "this" innerhalb der Funktion. – nnnnnn

Antwort

3

Die zweite funktionierte nicht, weil sie im globalen Kontext ausgeführt wurde. Hier ist ein Artikel über den this Kontext in der Funktion setTimeout geben, wie pro MDN (Check 'The "this" problem)'

Ihren Code, wenn auf diese Weise geschrieben, funktionieren würde:

setTimeout(flake.remove.bind(flake),1000); 
Verwandte Themen