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

jQuery Discussion :

Optimisation code traitement formulaire


Sujet :

jQuery

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 152
    Points : 87
    Points
    87
    Par défaut Optimisation code traitement formulaire
    Bonjour,

    J'ai un formulaire html où l'internaute renseigne plusieurs champs.
    Son nom doit s'afficher en majuscules.
    J'ai donc créer un petit script qui me permet de faire cela et qui fonctionne mais j'aimerais l'automatiser pour pouvoir le faire pour plusieurs champs

    Voici ce que j'ai fait et qui fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    nom = $('#edit-submitted-le-licencie-nom');
    nom.change(function() {
    	//alert(nom.val().toUpperCase());
    	majuscules = nom.val().toUpperCase();
    	nom.val(majuscules);
    });
    J'aimerais le faire également pour d'autres champs.
    J'ai donc créé un tableau comprenant tous mes champs à modifier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    array = [$('#edit-submitted-le-licencie-nom'),
    	    $('#edit-submitted-les-parents-mere-m-nom'),
    	    $('#edit-submitted-les-parents-pere-p-nom')
    	   ];
    Le problème c'est que je ne sais pas trop comment le parcourir en mêlant la fonction .each et .change

    J'ai testé quelques petits trucs mais qui ne fonctionnent pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $.each(array, function(value){
    	value.change(function() {
    		alert(value.val().toUpperCase());
    		majuscules = value.val().toUpperCase();
    		value.val(majuscules);
    	});
    });
    Pouvez-vous me guider, SVP?

    Merci

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Commence déjà par regarder la syntaxe de jQuery.each().

    Ensuite array.change(function() {...}) ça n'a aucun sens. Il n'existe aucun événement lié à un tableau.

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 152
    Points : 87
    Points
    87
    Par défaut
    effectivement je viens de le corriger dans mon message

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Ben oui mais c'est toujours pas ça !

    Le premier paramètre passé à la fonction de rappel est l'indice de l'élément, pas sa valeur.

  5. #5
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 152
    Points : 87
    Points
    87
    Par défaut
    merci mais, je ne comprends pas trop car mon tableau se présente donc sous la forme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    array[0]=$('#edit-submitted-le-licencie-nom');
    array[1]=$('#edit-submitted-les-parents-mere-m-nom');
    array[2]=$('#edit-submitted-les-parents-pere-p-nom');
    si je fais ceci; ça ne marche pas non plus, il y a quelque chose qui m'échappe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $.each(array, function(key, value){
    	key.change(function(value) {
    		alert(value.val().toUpperCase());
    		majuscules = value.val().toUpperCase();
    		value.val(majuscules);
    	});
    });

  6. #6
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    il y a quelque chose qui m'échappe
    Oui, je vois ça !

    Quand tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $.each(array, function(key, value){...})
    key correspond aux index du tableau (0, 1, ...) et value à la valeur correspondante (array[0], array[1], ...)
    Tu utilises donc les paramètres dans le mauvais ordre.

  7. #7
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 152
    Points : 87
    Points
    87
    Par défaut
    merci mais dans l'api jquery, il y a un exemple et ils mettent la clé en premier et la valeur en 2eme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $.each( { name: "John", lang: "JS" }, function(k, v){
       alert( "Key: " + k + ", Value: " + v );
     });
    Est ce que je me trompe au niveau du .each ou du .change ?

  8. #8
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    key = indexe ...
    value = contenu ...

    tu tentes d'applique un change non pas sur un element du DOM mais sur un index d'array .....

  9. #9
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par selinav
    ils mettent la clé en premier et la valeur en 2eme
    Citation Envoyé par Bovino
    key correspond aux index du tableau et value à la valeur correspondante
    Ben c'est ce que je t'ai dis !

  10. #10
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 152
    Points : 87
    Points
    87
    Par défaut
    Oui, j'ai donc remplacé le key par value mais il ne se passe rien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $.each(array, function(key, value){
    	value.change(function(value) {
    		alert(value.val().toUpperCase());
    		majuscules = value.val().toUpperCase();
    		value.val(majuscules);
    		});
    	});
    Si je mets un alert ('passe'); avant le alert(value.val().toUpperCase()); ça me l'affiche donc je passe bien dedans.

    J'ai essayé de passer ou non le paramètre 'value' dans la fonction du .change. Et d'utiliser this quand je n'en mets pas mais ça ne change rien

  11. #11
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Dans le callback de .change(), value correspond à l'élément DOM, pas à un objet jQuery, il faut donc appeler $(value) pour appliquer les méthodes jQuery.

    D'autre part, appeler deux paramètres avec le même nom est une très mauvaise idée !

  12. #12
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 152
    Points : 87
    Points
    87
    Par défaut
    Milles merci, j'ai enfin réussi.
    Je n'ai pas passé d'argument à la fonction de callback change, il n'y en avait pas besoin.

    Voici le code définitif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    array = [$('#edit-submitted-le-licencie-nom'),
    		         $('#edit-submitted-les-parents-mere-m-nom'),
    		         $('#edit-submitted-les-parents-pere-p-nom')
    		         ];
     
    $.each(array, function(key, value){
    	value.change(function() {
    		//alert(value.val().toUpperCase());
    		majuscules = value.val().toUpperCase();
    		value.val(majuscules);
    	});
    });

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

Discussions similaires

  1. [C++/VB.Net]Optimiser des traitements lourds
    Par NiamorH dans le forum Windows Forms
    Réponses: 8
    Dernier message: 28/05/2006, 10h03
  2. Optimiser mon traitement de données
    Par glsn dans le forum Requêtes
    Réponses: 29
    Dernier message: 15/05/2006, 10h35
  3. [PHP-JS] [javascrip + php] traitement formulaire
    Par Invité dans le forum Langage
    Réponses: 4
    Dernier message: 24/04/2006, 13h13
  4. [XSLT] Comment optimiser les traitements XML/XSL ?
    Par thibaut06 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 24/03/2006, 16h39
  5. pbl de code avec formulaire
    Par nedime dans le forum Langage
    Réponses: 6
    Dernier message: 06/02/2006, 15h12

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