Le code que vous avez déjà, couvre la les fonctionnalités générales que vous avez besoin, ce qui est de définir la valeur d'un bouton à une chaîne particulière.
L'extension que vous regardez est une question de changer la valeur de cette chaîne à l'une des trois valeurs. La première étape pourrait être de voir comment vous seriez en mesure de changer une valeur de plus d'un (pas nécessairement envelopper). Cela pourrait se faire de façon simple avec un tableau, quelque chose comme ce qui suit:
var labels = [ "Initial", "Value has changed", "Value changed again" ];
var index = 0;
function valChange() {
index++;
document.myForm.myButton.value = labels[index];
}
qui est idéal pour un maximum de deux clics, mais il se casse au-delà parce que vous allez après la fin du tableau. L'astuce pour obtenir le modèle complet de mise en boucle, alors, est de réinitialiser le compteur à zéro une fois qu'il passe devant la fin, ce qui rend efficacement votre circulaire de tableau:
function valChange() {
index++;
if (index == labels.length) {
index = 0;
}
document.myForm.myButton.value = labels[index];
}
Et le tour est joué! Chaque fois que la fonction valChange
est appelée, l'index est incrémenté de sorte que le libellé suivant soit différent et qu'il gère la contrainte de circularité comme requis.
Notez que cette implémentation ne rigoureusement regardez quelle est la valeur actuelle de l'étiquette; il conserve plutôt sa propre version de cet état via le compteur index
. Ceci est sans doute plus simple et plus propre si vous savez que cette méthode sera le seul moyen de modifier l'étiquette. Cependant, si l'étiquette peut être modifiée arbitrairement en une valeur différente par un code externe, vous pouvez travailler sur l'index à la volée en obtenant le libellé actuel du bouton et en le comparant à chaque élément du tableau à tour de rôle. C'est plus lent, un peu plus maladroit, mais plus robuste face aux modifications externes.