Page 1 sur 1

[RESOLU] Niveau CP double change class.Name qui bug ?

Posté : 13 nov. 2020, 00:25
par HXSS
Bonsoir le peuple,

vous l'aurez compris avec le titre, Javascript et moi nous ne sommes pas très intime !

le principe est pourtant simple j'ai un input dans un td et à la perte de focus je regarde si le champ est modifié et si c'est le cas je change la classe de l'input et du td, si le champ est de nouveau modifié (sans submit) pour remettre à la valeur enregistrée je remets les classes initiales

Code : Tout sélectionner

<td id="IDTDVISA0" class="AFFVISARED">
<input type="text" class="INPUTVISARED" name="FORMVISADATAOF[0]" id="INPUTVISA0" autocomplete="off" value="R" onblur="if(this.value != 'R' || this.value != 'r') document.getElementById('IDTDVISA0').className = 'AFFVISACHANGE'; document.getElementById('INPUTVISA0').className = 'INPUTVISACHANGE'; if(this.value == 'R' || this.value == 'r') document.getElementById('IDTDVISA0').className = 'AFFVISARED'; document.getElementById('INPUTVISA0').className = 'INPUTVISARED';">
</td>
dans le comportement:
si je modifie le champ il passe bien à AFFVISACHANGE par contre INPUTVISARED reste identique, si je remets la valeur à 'R' il repasse bien à AFFVISARED et INPUTVISARED

si j'inverse les deux if, les deux changent à AFFVISACHANGE INPUTVISACHANGE par contre si je remets la valeur à 'R' je ne peux pas revenir aux classes initiales

est-ce normal ?
PS: soyez indulgent si c'est codé avec les pieds j'ai bien précisé niveau CP ...

Re: Niveau CP double change class.Name qui bug ?

Posté : 13 nov. 2020, 10:27
par webmaster
Bonjour,

Je pense qu'il manque les { } après le if
Sans les accolades, seule l'instruction directement apres le if est conditionnée.

Le js est difficile à lire quand il est inclus dans la balise.
Il serait plus lisible d'écrire une fonction de traitement et de l'appeler avec onblur="blurItem(this)"

Re: Niveau CP double change class.Name qui bug ?

Posté : 13 nov. 2020, 11:34
par HXSS
Effectivement avec les { } la fonction se comporte comme je le souhaite mais si j'inverse les deux if le script se fige et je comprends toujours pas pourquoi :roll:

Code : Tout sélectionner

onblur=" if(this.value != 'R' || this.value != 'r') { document.getElementById('IDTDVISA0').className = 'AFFVISACHANGE'; document.getElementById('INPUTVISA0').className = 'INPUTVISACHANGE'; } if(this.value == 'R' || this.value == 'r') { document.getElementById('IDTDVISA0').className = 'AFFVISARED'; document.getElementById('INPUTVISA0').className = 'INPUTVISARED'; }"
Pour la fonction j'en ai bien conscience mais il y a 3 états possibles et les valeurs sont générées par PHP donc pour l'instant avec mes maigres connaissances je vois pas trop comment faire mais j'y reviendrai sûrement plus tard

Re: [RESOLU] Niveau CP double change class.Name qui bug ?

Posté : 13 nov. 2020, 11:57
par webmaster
J'ai un doute sur la condition
if(this.value != 'R' || this.value != 'r')

Elle est toujours vraie non ?
Les négations avec des ou c'est compliqué à comprendre.

Utilise toUpperCase() pour forcer en majuscule et éviter ce test bizarre
https://www.toutjavascript.com/referenc ... ercase.php

Re: [RESOLU] Niveau CP double change class.Name qui bug ?

Posté : 13 nov. 2020, 12:18
par HXSS
HA ! Maintenant c'est tout bon ! y compris if else
De base j'avais fait un text-transform:uppercase; en css du coup si je tapais r il affichait bien R mais en fait le value restait à r
mais effectivement oui mon truc c'était pas logique

Code : Tout sélectionner

if(this.value.toUpperCase() != 'R') {
	document.getElementById('IDTDVISA0').className = 'AFFVISACHANGE';
	document.getElementById('INPUTVISA0').className = 'INPUTVISACHANGE'; }
	else { 
		document.getElementById('IDTDVISA0').className = 'AFFVISARED';
		document.getElementById('INPUTVISA0').className = 'INPUTVISARED';
	}
Merci beaucoup