IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[AJAX] detecter modification d'un champs


Sujet :

JavaScript

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Par défaut [AJAX] detecter modification d'un champs
    bonjour,

    J'ai un formulaire avec plein de textbox, menu déroulant et des checkbox.

    Dans mon formulaire AJAX, j'ai une image qui me permet de connaitre l'état du formulaire (en cours d'envoi, erreur d'envoi, envoi OK, pas d'action en cours) => je change via un script l'image en fonction de l'etat.

    Lorsque les données ont été envoyées, j'affiche l'image "envoi OK" pour dire que tout c'est bien passé.
    => ce que je voudrais faire, c'est effacer cette image dès qu'un des champs de l'image à été modifier pour dire à l'utilisateur qu'il faut qu'il renvoie le formulaire : comment faire cela simplement (comment détecter que l'un des champs a été modifié) ?

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Bonjour,
    Citation Envoyé par Emcy Voir le message
    comment faire cela simplement (comment détecter que l'un des champs a été modifié) ?
    sur onchange de tes champs, tu changes l'image : si le onchange s'est déclenché, c'est que le champ a été modifié (par définition) ...

    A+

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Par défaut
    il n'y a pas plus simple ? car mettre onchange sur tous mes inputs, c'est super lourd (j'ai 200 inputs)...

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par Emcy Voir le message
    il n'y a pas plus simple ? car mettre onchange sur tous mes inputs, c'est super lourd (j'ai 200 inputs)...
    Si tu trouves plus simples de parcourir tous tes input pour comparer leur valeur initiale avec leur valeur actuelle, tu peux aussi faire comme ça

    A+

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Par défaut
    pas de solutions miracle alors ...

    J'ai essayé de faire un script qui défini l'evenement onchange comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function fonction_start(){
    	var Form = document.getElementById("monFormulaire");
     
    	for (key=0; key < Form.elements.length; key++) {  
    		Form.elements[key].onchange = "fonctionChangeImage();"	
    	}
     
    }
     
    function fonctionChangeImage(){
    	document.getElementById("monImage").src = "../empty.gif"
    }
    => mais ça ne marche po ....

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Essaye avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function fonction_start(){
    	var Form = document.forms["monFormulaire"]; // Pour utiliser la bonne collection
    		
    	for (key=0; key < Form.elements.length; key++) {  
    		Form.elements[key].onchange = fonctionChangeImage;
    	}
     
    }
    A+

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Par défaut
    merci ça marche nickel.
    Par contre j'ai plutôt utiliser l'événement onfocus car avec les textbox, il faut sortir de la textbox pour que l'événement onchange agisse (bien que ça ne fasse pas exactement ce que je voulais, ça me parait mieux d'utiliser onfocus)

  8. #8
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par Emcy Voir le message
    Par contre j'ai plutôt utiliser l'événement onfocus car avec les textbox, il faut sortir de la textbox pour que l'événement onchange agisse


    Si tu cliques dans l'input et que tu ressors sans rien modifier (ou en resaisissant la même chose), tu vas détecter un changement à tord (par exemple quelqu'un qui se déplace avec TAB sera toujours gêné par ton contrôle).

    Pourquoi le délai de prise en compte du onchange te gêne-t-il ?
    Pour valider le formulaire, tu es obligé de sortir de l'input, donc de déclencher le onchange => aucun problème.

    Pour que ton onfocus fonctionne correctement, il faut systématiquement ajouter le test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (this.value != this.defaultValue)
    Un peu lourd, quand un évènement est prévu pour faire la même chose

    A+

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Par défaut
    Citation Envoyé par E.Bzz Voir le message
    Pourquoi le délai de prise en compte du onchange te gêne-t-il ?
    Pour valider le formulaire, tu es obligé de sortir de l'input, donc de déclencher le onchange => aucun problème.
    Si l'utilisateur envoi le formulaire une premiere fois, il y a une image "données enregistrées" qui s'affiche. Après si l'utilisateur change la valeur d'une seule des textbox (sans ressortir de celle-ci), l'image sera toujours là alors que la valeur aura changée => donc l'utilisateur devra cliquer sur enregistrer alors qu'il y aura l'image "données enregistrées" d'active (pour moi, cette image sert d'indicateur pour savoir si les données du formulaire ont été enregistrées).


    => Je préfère utiliser onfocus car si on change la valeur de la textbox, on verra forcement l'image disparaitre : le seul bémol est que si l'utilisateur sélectionne la textbox mais ne change pas la valeur, l'image disparaitera aussi (je préfaire ça) : mieux vaut enregistrer alors qu'il n'y en a pas besoin que plutôt oublier d'enregistrer alors qu'il y en a besoin.

    Donc voila pourquoi je préfère rester sur cette solution

  10. #10
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    C'est un choix qui se défend

    Une autre solution est de ne laisser l'image "données enregistrées" qu'un court instant (10 secondes avec un setTimeout() ). On peut raisonnablement supposer que l'utilisateur est toujours devant l'écran pour la voir ...
    C'est le principe que j'ai retenu pour une appli récente (pour les mêmes raisons de cohérence de l'affichage que toi).

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Evenement permettant de detecter la modif d'un champ
    Par DevServlet dans le forum JSF
    Réponses: 2
    Dernier message: 25/08/2009, 13h55
  2. Detecter modification d'un champ => Dirty
    Par GrooveRage dans le forum VBA Access
    Réponses: 7
    Dernier message: 15/10/2007, 17h08
  3. Modification d'un champs texte
    Par shinobi dans le forum Access
    Réponses: 2
    Dernier message: 15/06/2005, 10h05
  4. empêcher la modification d'un champ
    Par shurized dans le forum Oracle
    Réponses: 29
    Dernier message: 30/08/2004, 18h25
  5. DBNavigator, requete SQL et modif d'un champ
    Par TieumB dans le forum C++Builder
    Réponses: 9
    Dernier message: 27/01/2004, 08h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo