2009-11-30 12 views
0

Ce que je veux, c'est fournir des commentaires de l'utilisateur sur l'état du fonctionnement grâce à l'étiquette du bouton. Initialement, le bouton dit "sauvegarder", une fois cliqué je veux changer l'étiquette à "enregistrer ..." entrer une autre fonction et une fois la fonction retourne changer l'étiquette à "sauvé" puis pause 2 secondes et remettre l'étiquette initiale "save" valeur.Tableau de bord: fournir les commentaires des utilisateurs en changeant l'étiquette du bouton

Voici le code:

function myClickHandler(event) 
{ 
    document.getElementById("button").object.textElement.color = "saving..."; 
    functionx() 
    document.getElementById("button").object.textElement.color = "saved"; 
    sleep (5000); 
    document.getElementById("button").object.textElement.color = "save"; 
} 

Le problème est que, pour une raison que la dernière document.getElementById("button").object.textElement.color = "save"; est effectivement visible sur toile parce que la toile ou le bouton sont rendus qu'une seule fois la sortie I de myClickHandler fonction. Un conseil?
Merci d'avance

Répondre

0

Quelque chose comme ceci pourrait fonctionner mieux. Je suis sûr que setTimeout est non-bloquant.

function myClickHandler(event) { 
    updateLabel("saving..."); 
    setTimeout("performFunctionX()", 250); 
} 

function performFunctionX() { 
    functionx;() 
    updateLabel("saved"); 
    setTimeout("updateLabel('save')", 5000); 
} 

function updateLabel(labelText) { 
    document.getElementById("button").object.textElement.color = labelText; 
} 
+0

Merci, ça marche (jusqu'à présent, je dois le tester encore sur le widget productif), je viens d'avoir à utiliser document.getElementById (« bouton ») object.textElement.innerText = labelText. au lieu de document.getElementById ("bouton"). Object.textElement.color = labelText; Le .color était une faute de frappe de mon côté, désolé. – Zsolt

+0

Oui, cela fonctionne, testé maintenant. Triste que je ne comprends pas exactement pourquoi ça marche, mais je suppose que cela arrivera avec le temps. Merci encore Zsolt – Zsolt

+0

Votre code original bloque le navigateur et ne lui permet pas de rendre. Tous vos appels sont synchrones. Cependant, setTimeout() est asynchrone, de sorte que le rendu peut être effectué pendant son exécution. –