[javascript] Incrémentation impossible ?!

Résolu
Erdnax Messages postés 2279 Statut Contributeur -  
Marden Messages postés 1075 Statut Membre -
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

Richez
 
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
Erdnax Messages postés 2279 Statut Contributeur 497
 
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...
0
Erdnax Messages postés 2279 Statut Contributeur 497
 
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.

@+ ;)
0
Marden Messages postés 1075 Statut Membre 210
 
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)
0
Erdnax Messages postés 2279 Statut Contributeur 497
 
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...
0
Marden Messages postés 1075 Statut Membre 210 > Erdnax Messages postés 2279 Statut Contributeur
 
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).
0