Problème de variable Javascript

Fermé
BlackYoup - 3 déc. 2012 à 20:16
BlackYoup Messages postés 181 Date d'inscription mardi 4 décembre 2012 Statut Membre Dernière intervention 10 juin 2014 - 4 déc. 2012 à 11:45
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 :


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 :-)

7 réponses

Utilisateur anonyme
4 déc. 2012 à 11:09
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 :
for(var i = parseInt(xbox360Nbr); i < parseInt(pcNbr); i++)
1
BlackYoup Messages postés 181 Date d'inscription mardi 4 décembre 2012 Statut Membre Dernière intervention 10 juin 2014 20
4 déc. 2012 à 11:17
Merci beaucoup c'est bien ca :)
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 !
0
BlackYoup Messages postés 181 Date d'inscription mardi 4 décembre 2012 Statut Membre Dernière intervention 10 juin 2014 20
4 déc. 2012 à 11:20
Problème résolu donc, mais je peux pas le mettre en résolu, vu que j'ai créé ce topic avant de faire mon compte :s
0
Utilisateur anonyme
4 déc. 2012 à 11:42
Cette erreur n'a rien de stupide. C'est le problème de tous les langages faiblement typés ou pas typés du tout. C'est bien pratique, sauf que parfois ça fait des choses à l'insu de ton plein gré ^^.
0
BlackYoup Messages postés 181 Date d'inscription mardi 4 décembre 2012 Statut Membre Dernière intervention 10 juin 2014 20
4 déc. 2012 à 11:45
En tous cas, merci beaucoup !
0
lol tu peut pas faire un boucle de ce genre :
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é.
0
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 :)

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 :-(
0
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.
0
BlackYoup Messages postés 181 Date d'inscription mardi 4 décembre 2012 Statut Membre Dernière intervention 10 juin 2014 20
4 déc. 2012 à 09:19
Les valeurs sont bien celles attendues, alert() me retourne 10 8 10
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
aomann Messages postés 51 Date d'inscription lundi 26 novembre 2012 Statut Membre Dernière intervention 4 décembre 2012 2
4 déc. 2012 à 03:30
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.
0
BlackYoup Messages postés 181 Date d'inscription mardi 4 décembre 2012 Statut Membre Dernière intervention 10 juin 2014 20
4 déc. 2012 à 09:15
Oui, mais je suis rendu à tester n'importe quoi maintenant, c'était une erreur de c/c de ma part à ce moment.
0
Utilisateur anonyme
4 déc. 2012 à 09:43
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 ?
0
BlackYoup Messages postés 181 Date d'inscription mardi 4 décembre 2012 Statut Membre Dernière intervention 10 juin 2014 20
4 déc. 2012 à 10:14
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 :/

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 ?
0
BlackYoup Messages postés 181 Date d'inscription mardi 4 décembre 2012 Statut Membre Dernière intervention 10 juin 2014 20
4 déc. 2012 à 10:20
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)
0