Problème de variable Javascript

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


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
 
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 184 Statut Membre 20
 
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 184 Statut Membre 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
 
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 184 Statut Membre 20
 
En tous cas, merci beaucoup !
0
Utilisateur anonyme
 
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
BlackYoup
 
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
Utilisateur anonyme
 
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 184 Statut Membre 20
 
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 52 Statut Membre 2
 
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 184 Statut Membre 20
 
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
 
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 184 Statut Membre 20
 
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 184 Statut Membre 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