[javascript] Incrémentation impossible ?! [Résolu/Fermé]

Signaler
Messages postés
2289
Date d'inscription
mercredi 1 octobre 2003
Statut
Contributeur
Dernière intervention
1 octobre 2007
-
Marden
Messages postés
1072
Date d'inscription
dimanche 11 février 2001
Statut
Membre
Dernière intervention
29 janvier 2006
-
Bonjour à tous,

Voilà, je suis pas un pro du javascript, mais d'habitude je m'en sort.

Là j'ai un problème assez simple, mais que je n'arrive pas à résoudre. J'ai un champ texte de formulaire contenant un chiffre. Au clique sur un bouton, j'aimerais que cette valeur s'incrémente d'un, ou se "désincrémente". Voilà le code javascript :
<script language="javascript" type="text/javascript">
function moins(){
var ou = document.getElementById('code');
ou.value = ou.value - 1;
}

function plus(){
var ous = document.getElementById('code');
ous.value = ous.value+1;
}
</script>

Et ça, c'est mon formulaire, avec un bouton pour réduire la valeur, le champ texte, et un bouton pour augmenter la valeur.
<input type="button" value="-" onclick="moins()">
<input maxLength="4" size="2" value="20" id="code" name="code" >
<input type="button" value="+" onclick="plus()">
Mon problème : lorsque je clique sur le moins, tout se passe bien, mais lorsque je clique sur le plus, il rajoute un 1 à la fin de ma valeur, comme si cette dernière était interprétée en tant que chaîne et non comme chiffre. D'où est-ce que vient la différence entre le moins et le plus ?

Merci à ceux qui se pencheront sur mon problème ;)

@+

4 réponses

ous.value = ous.value+1;

Essayez peut-être de remplacer toute cette ligne par :
ous.value++


les window.document.form.textfield.value semblent être des nombres mais se comportent parfois bizarrement

Je sais pas
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 72197 internautes nous ont dit merci ce mois-ci

Messages postés
2289
Date d'inscription
mercredi 1 octobre 2003
Statut
Contributeur
Dernière intervention
1 octobre 2007
477
Oups, désolé, résolu.

Je n'avais peut-être pas cherché assez ? Posté trop vite... Désolé.

@+

P.S. Si y en a que ça intéresse, j'ai très simplement fais un ous.value++ ... pas cherché assez qu'j'ai dis...
Messages postés
2289
Date d'inscription
mercredi 1 octobre 2003
Statut
Contributeur
Dernière intervention
1 octobre 2007
477
Comme je l'ai dis dans mon post numéro 2 ^^, c'est ce que j'ai essayé, et ça à marché ;)

Merci d'avoir pris le temps (même inutillement lol) de me répondre.

@+ ;)
Messages postés
1072
Date d'inscription
dimanche 11 février 2001
Statut
Membre
Dernière intervention
29 janvier 2006
206
Le Javascript est effectivement un langage modérément typé. Le plus souvent, c'est le contenu initial d'une variable qui détermine son type, lequel peut d'ailleurs changer pendant le déroulement du script.

Il semble que les zones d'un formulaire soient, à priori, de type "chaîne", auquel cas les opérations numériques doivent être précédées d'une opération de conversion (par exemple, via "parseInt").

Les deux opérations pourraient être traitées par une même fonction du genre :
function modifierZone(inc) {
{form}.{zone}.value = parseInt({form}.{zone}.value) + inc ;
}

A l'appel, il convient alors d'utiliser un argument :
modiferZone(-1)
modifierZone(1)
Erdnax
Messages postés
2289
Date d'inscription
mercredi 1 octobre 2003
Statut
Contributeur
Dernière intervention
1 octobre 2007
477
Merci pour ces explications claires,

pour les paramètres entre les paranthèses, je connaissais, mais ce que je comprenais pas, c'est pourquoi, lorsque j'appliquais un moins, le contenu était bien compris en tant que nombre, alors que pour le plus, il prenait ça comme un chaîne... Pourquoi une différence en fonction du type de traitement ?

Enfin bon, du moment que ça fonctionne...
Marden
Messages postés
1072
Date d'inscription
dimanche 11 février 2001
Statut
Membre
Dernière intervention
29 janvier 2006
206 > Erdnax
Messages postés
2289
Date d'inscription
mercredi 1 octobre 2003
Statut
Contributeur
Dernière intervention
1 octobre 2007

Je pense, mais n'en donnerais pas ma tête à couper, que c'est lié au mode de fonctionnement de l'interpréteur, variable selon les constructeurs. Dans le cas "qui marche", on peut supposer que, à la rencontre du signe "-", l'interpréteur "s'attend à" une valeur numérique, et exécute automatiquement un "cast" avant d'effecter l'opération. L'opérateur unaire "-" est une des difficultés classiques de l'écriture d'un interpréteur.
Personnellement, et pour éviter de m'encombrer le cerveau, j'ai choisi de ne garder que la méthode que je préconise.

Dans le même ordre d'idées, la démarche de l'interpréteur explique que les messages d'erreurs ne soient pas toujours explicites (ex : unexpected ")" fait sans doute référence au premier choix valide parmi d'autres possibilités qui, elles, ne sont pas signalées).