Problème de variable Javascript
BlackYoup
-
BlackYoup Messages postés 184 Statut Membre -
BlackYoup Messages postés 184 Statut Membre -
Bonjour,
je débute en javascript, mais je me confronte aujourd'hui à un problème que je n'ai jamais vu ailleurs, et aucune aide trouvé sur le net.
En gros, j'ai une boucle for() avec des paramètres, les paramètres permettent que la boucle démarre, mais impossible de rentrer dedans.
J'ai 4 boucles for pratiquement identiques, mise a part les variables qui changent, et cette boucle est la seule à ne pas vouloir s'éxécuter alors qu'elle devrais :
Voici mon code :
Il y a surement moyen de l'améliorer je suppose, mais comme dit plus haut, je débute ^^
La boucle qui pose problème est le 3e, en revanche, les boucles 1-2-4 passent niquel et la valeur de pcNbr ou xbox360Nbr ont été récupérées dans un cookie.
Si j'enleve les variables et que je met le nombre en dur, ca passe. Si quelqu'un a une piste, je suis preneur car depuis plusieurs jours je me creuse la tête. J'ai déja essayer de changer le nom de variable,le type, ca ne fais rien. J'ai l'impression que ma variable est "cassée" ^^'.
Merci à vous :-)
je débute en javascript, mais je me confronte aujourd'hui à un problème que je n'ai jamais vu ailleurs, et aucune aide trouvé sur le net.
En gros, j'ai une boucle for() avec des paramètres, les paramètres permettent que la boucle démarre, mais impossible de rentrer dedans.
J'ai 4 boucles for pratiquement identiques, mise a part les variables qui changent, et cette boucle est la seule à ne pas vouloir s'éxécuter alors qu'elle devrais :
Voici mon code :
function uncheckItemCategorie(categorie)
{
// ici, les valeurs des variables ci-dessous sont les suivants :
x
6
8
10
12
var nbrCheckedCategorie = checkIfCookieExist('nbrCheckedCategorie'+categorie);
var ps3Nbr = checkIfCookieExist('nbrCheckedCategorieps3');
var xbox360Nbr = checkIfCookieExist('nbrCheckedCategoriexbox360');
var pcNbr = checkIfCookieExist('nbrCheckedCategoriepc');
var wiiNbr = checkIfCookieExist('nbrCheckedCategoriewii');
if(nbrCheckedCategorie == ps3Nbr)
{
for(var i = 4; i < ps3Nbr; i++)
{
var deleteChecked = document.consoleCheckBoxes[i];
deleteChecked.checked = false;
}
}
else if(nbrCheckedCategorie == xbox360Nbr)
{
for(var i = ps3Nbr; i < xbox360Nbr; i++)
{
var deleteChecked = document.consoleCheckBoxes[i];
deleteChecked.checked = false;
}
}
else if(nbrCheckedCategorie == pcNbr)
{
for(i = xbox360Nbr, b = pcNbr; i < b; i++)
{
var deleteChecked = document.consoleCheckBoxes[i];
deleteChecked.checked = false;
}
}
else if(nbrCheckedCategorie == wiiNbr)
{
for(i = pcNbr; i < wiiNbr; i++)
{
var deleteChecked = document.consoleCheckBoxes[i];
deleteChecked.checked = false;
}
}
};
Il y a surement moyen de l'améliorer je suppose, mais comme dit plus haut, je débute ^^
La boucle qui pose problème est le 3e, en revanche, les boucles 1-2-4 passent niquel et la valeur de pcNbr ou xbox360Nbr ont été récupérées dans un cookie.
else if(nbrCheckedCategorie == pcNbr)
{
for(i = xbox360Nbr, b = pcNbr; i < b; i++)
{
var deleteChecked = document.consoleCheckBoxes[i];
deleteChecked.checked = false;
}
}
Si j'enleve les variables et que je met le nombre en dur, ca passe. Si quelqu'un a une piste, je suis preneur car depuis plusieurs jours je me creuse la tête. J'ai déja essayer de changer le nom de variable,le type, ca ne fais rien. J'ai l'impression que ma variable est "cassée" ^^'.
Merci à vous :-)
A voir également:
- Problème de variable Javascript
- Telecharger javascript - Télécharger - Langages
- Javascript void 0 c'est quoi ✓ - Forum Réseaux sociaux
- Impossible de créer le fichier de travail. vérifiez la variable d'environnement temp - Forum Microsoft Office
- Variable d'environnement temp - Forum Word
- Le fichier contient un programme écrit en python. le programme construit un mot secret mais il ne l'affiche pas. modifiez ce programme afin que à chaque itération de la boucle : la variable a augmente de 2 la variable b diminue de 1 ajoutez une instruction pour faire afficher le mot secret construit. quel est ce mot secret ? ✓ - Forum Python
7 réponses
Trouvé :)
Je suppose que quelqu'un d'habitué au Javascript l'aurait vu plus vite, mais je n'ai pas tellement l'habitude.
Le problème, c'est que tes variables sont des chaînes de caractères et non pas des nombres. Quand tu les initialises "à la main", ce sont des nombres et les comparaisons se font bien comme tu veux.
Quand elles viennent d'un formulaire, ce sont des textes et la comparaison est alphabétique. Donc '8' est plus grand que '10' et tu n'entres pas dans ta boucle...
Il suffit de convertir les chaînes en nombres :
Je suppose que quelqu'un d'habitué au Javascript l'aurait vu plus vite, mais je n'ai pas tellement l'habitude.
Le problème, c'est que tes variables sont des chaînes de caractères et non pas des nombres. Quand tu les initialises "à la main", ce sont des nombres et les comparaisons se font bien comme tu veux.
Quand elles viennent d'un formulaire, ce sont des textes et la comparaison est alphabétique. Donc '8' est plus grand que '10' et tu n'entres pas dans ta boucle...
Il suffit de convertir les chaînes en nombres :
for(var i = parseInt(xbox360Nbr); i < parseInt(pcNbr); i++)
lol tu peut pas faire un boucle de ce genre :
tu devrais plutôt essayer ça :
Voilà, en espérant t'avoir aidé.
for(i = xbox360Nbr, b = pcNbr; i < b; i++)
tu devrais plutôt essayer ça :
b=pcNbr;
for (var i=xbox360Nbr; i<b;i++){
var deleteChecked = document.consoleCheckBoxes[i];
deleteChecked.checked = false;
}
Voilà, en espérant t'avoir aidé.
Oui, en effet, mais c'est une erreur de ma part, j'ai changé mon script avant le c/c, le i était définis plus haut, je remet ici mon bloc actuel, dans lequel ca ne marche toujours pas :)
Je tiens aussi à préciser que ni la console javascript de firefox, chrome, opéra ou jsbin.com n'ont détecté d'erreurs dans mon script, je ne comprend absolument pas :-(
else if(nbrCheckedCategorie == pcNbr)
{
for(var i = xbox360Nbr; i < pcNbr; i++)
{
var deleteChecked = document.consoleCheckBoxes[i];
deleteChecked.checked = false;
}
}
Je tiens aussi à préciser que ni la console javascript de firefox, chrome, opéra ou jsbin.com n'ont détecté d'erreurs dans mon script, je ne comprend absolument pas :-(
Bonsoir
Non, ce n'était pas une erreur, tu avais parfaitement le droit d'écrire ta boucle for comme ça, même si c'était inutilement compliqué.
Ajoute un alert (nbrCheckedCategorie + " " +xbox360Nbr+" " +pcNbr); pour être bien sûr des valeurs de tes variables.
Non, ce n'était pas une erreur, tu avais parfaitement le droit d'écrire ta boucle for comme ça, même si c'était inutilement compliqué.
Ajoute un alert (nbrCheckedCategorie + " " +xbox360Nbr+" " +pcNbr); pour être bien sûr des valeurs de tes variables.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Salut,
C'est faux. C'est possible en JavaScript et en plusieurs autres langages.
Mais, je dois avouer que dans se cas, ce n'est vraiment pas la bonne façon.
C'est faux. C'est possible en JavaScript et en plusieurs autres langages.
Mais, je dois avouer que dans se cas, ce n'est vraiment pas la bonne façon.
Oui, mais je suis rendu à tester n'importe quoi maintenant, c'était une erreur de c/c de ma part à ce moment.
Ajoute un alert(i); au début de ta boucle (avant var deleteChecked ...)
Es-tu sûr que consoleCheckBoxes[8] et consoleCheckBoxes[9] existent bien ? Leur création est-elle codée "en dur" ou bien générée par un script ?
Es-tu sûr que consoleCheckBoxes[8] et consoleCheckBoxes[9] existent bien ? Leur création est-elle codée "en dur" ou bien générée par un script ?
Merci de ta réponse, mais le problème est que la boucle ne s'éxécute même pas ! Impossible d'y rentrer et donc de faire un alert() dedans :/
Pourtant comme dis plus haut, mes 3 autres boucles for() s'éxécutent normalement. Sinon, oui, consoleCheckBoxes[8] et consoleCheckBoxes[9] existent bien, cela va de consoleCheckBoxes[0] à consoleCheckBoxes[12]. Elles sont créées par une boucle php. Une idée ?
else if(nbrCheckedCategorie == pcNbr)
{
alert('out for'); // Affiche Out for
alert(nbrCheckedCategorie + " " + xbox360Nbr + " " + pcNbr); // Affiche 10 8 10
for(var i = xbox360Nbr; i < pcNbr; i++)
{
alert('in for'); // N'affiche rien, impossible de rentrer dans la boucle
var deleteChecked = document.consoleCheckBoxes[i];
deleteChecked.checked = false;
}
}
Pourtant comme dis plus haut, mes 3 autres boucles for() s'éxécutent normalement. Sinon, oui, consoleCheckBoxes[8] et consoleCheckBoxes[9] existent bien, cela va de consoleCheckBoxes[0] à consoleCheckBoxes[12]. Elles sont créées par une boucle php. Une idée ?
Si je met les valeurs en dur à la place de mes variables dans ma boucle for, elle s'exécute très bien et j'ai le résultat que je souhaite, le problème se situe donc vraiment au niveau de l'initialisation de la boucle ou même de la variable pcNbr voire xbox360Nbr (qui fonctionne très bien pour ma boucle N°2)
Mais c'est quand même étrange, je les avais déja mises en int une fois, lors d'un test et ca n'avais pas marché, j'avais donc exclu cette option, de plus que mes autres for() étant aussi en string, pour moi ca devais marcher, je ne savais pas qu'il se basait sur une comparaison alphabétique :)
Merci beaucoup, c'est vrai que cette erreur est bien stupide :)
Bonne journée !