[JS] - onchange

Résolu/Fermé
ben85350 Messages postés 610 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 2 avril 2013 - 31 janv. 2009 à 19:26
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 - 3 févr. 2009 à 14:48
Bonjour,
J'ai dans mon formulaire, une liste d'informations (liste déroulante). J'ai aussi une case à cocher. J'aimerais que lorsque l'on coche cette case, notre liste déroulante se grise, j'ai donc ce début de code en javascript qui s'applique au checkbox (<input type="checkbox" name="monCheck" id="monCheck" onChange="griser()" />):
function griser()
{
	var chk = document.getElementById('monCheck').checked;
	var liste = document.getElementById('monSelect').disabled;
				
	if (chk == true){
		document.getElementById('monSelect').disabled ="true";
	}
				
}
Le problème est que ma liste déroulante reste grise et inaccessible même si on décoche la case. Donc si vous trouver une solution je suis preneur ^^. Merci

4 réponses

Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 921
31 janv. 2009 à 19:37
salut,

as-tu fais des tests pour savoir si tu gères bien l'évènement ?
es-tu en XHTML ? si oui, essaie avec "onchange".
et au passage tu peux simplifier en :
function griser()
{
	document.getElementById('monSelect').disabled =document.getElementById('monCheck').checked;
}

je vais regarder, je ne suis pas sûr que onchange fonctionne pour toutes les balises et tous les navigateurs.
tu as testé avec quoi d'ailleurs ?
0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 921
31 janv. 2009 à 19:44
non, pas de change pour checkbox.
change
    L'événement change advient quand une zone de saisie perd l'attention ou quand sa valeur est modifiée depuis qu'elle a l'attention. Cet événement s'applique aux éléments INPUT, SELECT et TEXTAREA.

source

tu peux utiliser onclick mais qui ne tiendra pas compte des changements effectués au clavier ou lancer une boucle qui surveille en permanence l'état du checkbox.
0
ben85350 Messages postés 610 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 2 avril 2013 27
31 janv. 2009 à 20:14
Merci pour ta réponse rapide, claire et aussi pour les sources.
J'ai donc utilisé onClick; j'ai testé avec Firefox, Opéra, Safari et IE : cela fonctionne.
Merci pour le coup de main !
0
ben85350 Messages postés 610 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 2 avril 2013 27
31 janv. 2009 à 20:33
Seul problème : si la case est coché par défaut au chargement de la page (étant donné qu'il n'y a aucune action)
0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 921
31 janv. 2009 à 20:39
donc mieux vaut ajouter une boucle qui surveille l'état de la case à cocher :
function loop(){
  document.getElementById('monSelect').disabled = document.getElementById('monCheck').checked;
  setTimeout("loop()",200);
  return true
}


et tu la lances sur le onload :
<body onload="loop();">
0
ben85350 Messages postés 610 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 2 avril 2013 27
3 févr. 2009 à 12:44
Merci pour ton aide !
Le setTimeout est donc en quelque sorte un rafraichissement si j'ai bien comprit.
0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 921 > ben85350 Messages postés 610 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 2 avril 2013
3 févr. 2009 à 14:48
salut,

c'est juste le déclenchement d'une action au bout d'un temps donné.
comme dans la fonction appelée on utilise à nouveau setTimeOut() ça fait une boucle.

en fait c'est un compte à rebours.
0