2017-10-02 2 views
0

J'ai le code jQuery suivant. La fonction this.Next() lance une erreur "n'est pas une fonction" lorsqu'elle est appelée. La fonction this.Next() est appelée dans la même fonction que this.countdown(). Comment est-ce que j'appellerais this.Next() dans la fonction imbriquée setInterval()?Comment appeler une fonction depuis une fonction imbriquée dans jQuery?

this.countdown = function(element) { 
    interval = setInterval(function() { 
    var el = document.getElementById(element); 
    if(seconds == 0) { 
     if(minutes == 0) { 
     alert(el.innerHTML = "Your time for this section has expired");      
     clearInterval(interval); 

     // Send user to the next section 
     return this.Next(); 
     } else { 
     minutes--; 
     seconds = 60; 
     } 
    } 
    if(minutes > 0) { 
     var minute_text = minutes + ' min'; 
    } else { 
     var minute_text = ''; 
    } 
    var second_text = 'sec'; 
    el.innerHTML = 'Your time: ' + minute_text + ' ' + seconds + ' ' + second_text; 
    seconds--; 
    }, 1000);  
}; 
+0

c'est à cause de la portée est incorrecte. Vous êtes 'this' dans le' setInterval' est le setInterval lui-même et non l'objet. Il y a beaucoup de ces questions sur la pile, essayez de trouver la réponse là-bas. –

+0

Copie possible de [Javascript setInterval et \ 'this \' solution] (https://stackoverflow.com/questions/2749244/javascript-setinterval-and-this-solution) –

Répondre

2

this La valeur de ce paramètre dépend du contexte dans lequel il est appelé. Vous devriez essayer comme ci-dessous (je suppose que votre fonction countdown est MyObject)

function MyObject() { 
    var self = this; // add this declaration and instead of this key word, you can use self 
    self.countdown = function (element) { 
     ....blah blah blah... 


     return self.Next(); // instead of this.Next(), you use self.Next() 
     ....blah blah blah... 
    } 
} 
0

Peut-être que c'est parce que vous avez Suivant écrire() au lieu de la prochaine() Essayez d'écrire petit « n ».

Espérons que cela vous aidera

Merci !!