2017-09-27 4 views
0

Dans une fonction $.ajax success, j'essaie d'exécuter un délai avant de passer un autre appel. Mon document comporte un élément <DIV ID="status"></DIV>, donc la première étape fonctionne ici très bien:Pourquoi selector.text obtient-il une valeur de fonction interne?

$("#status").text = "Refreshing"; 

Mais lorsque je tente d'ajouter des points à ce texte via une fonction setInterval comme ceci:

var count = 0; 
var waitingID = setInterval(waiting, 1000); 
function waiting() { 
    if(count == 5) { 
     clearInterval(waitingID); 
     CallUpdate(); 
    } 
    else { 
     count++; 
     var notice = $("#status"); 
     notice.text(notice.text + "."); 
    } 
} 

le texte dans ce DIV devient

fonction

(valeur) {accès retour (ce, la fonction (valeur) { valeur de retour === non défini? jQuery.text (this): this.empty(). Chaque (fonction() { if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) { this.textContent = valeur; } }); }, null, value, arguments.length); }

Que se passe-t-il? Pourquoi le notice.text(notice.text + "."); n'at-il pas simplement ajouté un . au texte dans le DIV?

Répondre

1

Rien à redire avec votre fonction. Vous n'utilisez pas correctement la fonction text() de jQuery.

$('#status').text('Refreshing'); 
 
var count = 0; 
 
var waitingID = setInterval(waiting, 1000); 
 
function waiting() { 
 
    if(count == 5) { 
 
     clearInterval(waitingID); 
 
     console.log('CallUpdate()'); 
 
    } 
 
    else { 
 
     count++; 
 
     var notice = $("#status"); 
 
     notice.text(notice.text() + "."); 
 
    } 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<p id="status"></p>

1

jQuery de text() est une fonction, pas une propriété, être utilisé comme $("#status").text("Refreshing");

Il n'accepte cependant un rappel que vous pouvez utiliser pour le texte concaténer, comme celui-ci

var notice = $("#status"); 
notice.text(function(_,txt) { 
    return txt + "." 
}); 

Lorsque vous faire notice.text(notice.text + "."); vous essayez d'ajouter une période à une référence de fonction

+1

Je crois qu'il faut une chaîne régulière, donc pourrait tout aussi bien être 'notice.text (txt + "")' – Svenskunganka

+0

Oui, il faudrait une chaîne régulière, mais 'notice.text' n'est pas une chaîne, c'est un objet, ou plus précisément une fonction, que l'OP essaye de concaténer en une chaîne – adeneo

+0

Oh, tire, c'est vrai. Le raccourci auquel je devais penser est 'notice.text (notice.text() +". ");'. << qui fonctionne bien – feetwet