[javascript] Incrémentation impossible ?!

Résolu/Fermé
Erdnax Messages postés 2273 Date d'inscription mercredi 1 octobre 2003 Statut Contributeur Dernière intervention 1 octobre 2007 - 12 sept. 2005 à 10:02
Marden Messages postés 1072 Date d'inscription dimanche 11 février 2001 Statut Membre Dernière intervention 29 janvier 2006 - 12 sept. 2005 à 16:07
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
Erdnax Messages postés 2273 Date d'inscription mercredi 1 octobre 2003 Statut Contributeur Dernière intervention 1 octobre 2007 497
12 sept. 2005 à 10:21
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 2273 Date d'inscription mercredi 1 octobre 2003 Statut Contributeur Dernière intervention 1 octobre 2007 497
12 sept. 2005 à 11:44
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 1072 Date d'inscription dimanche 11 février 2001 Statut Membre Dernière intervention 29 janvier 2006 208
12 sept. 2005 à 15:04
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 2273 Date d'inscription mercredi 1 octobre 2003 Statut Contributeur Dernière intervention 1 octobre 2007 497
12 sept. 2005 à 15:35
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 1072 Date d'inscription dimanche 11 février 2001 Statut Membre Dernière intervention 29 janvier 2006 208 > Erdnax Messages postés 2273 Date d'inscription mercredi 1 octobre 2003 Statut Contributeur Dernière intervention 1 octobre 2007
12 sept. 2005 à 16:07
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