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

Pour toutes les discussions javascript, jQuery et autres frameworks
Répondre
HXSS
Messages : 3
Enregistré le : 12 nov. 2020, 23:39

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

Message par HXSS » 13 nov. 2020, 00:25

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 ...
Modifié en dernier par HXSS le 13 nov. 2020, 11:36, modifié 1 fois.

Avatar du membre
webmaster
Administrateur du site
Messages : 396
Enregistré le : 28 févr. 2017, 15:19

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

Message par webmaster » 13 nov. 2020, 10:27

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)"
TJS : 20 ans et mon livre Tout JavaScript chez Dunod
https://www.toutjavascript.com/livre/index.php

HXSS
Messages : 3
Enregistré le : 12 nov. 2020, 23:39

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

Message par HXSS » 13 nov. 2020, 11:34

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

Avatar du membre
webmaster
Administrateur du site
Messages : 396
Enregistré le : 28 févr. 2017, 15:19

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

Message par webmaster » 13 nov. 2020, 11:57

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
TJS : 20 ans et mon livre Tout JavaScript chez Dunod
https://www.toutjavascript.com/livre/index.php

HXSS
Messages : 3
Enregistré le : 12 nov. 2020, 23:39

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

Message par HXSS » 13 nov. 2020, 12:18

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

Répondre