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 :

Comment puis-je comparer deux champs


Sujet :

jQuery

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 098
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 098
    Points : 946
    Points
    946
    Par défaut Comment puis-je comparer deux champs
    Bonjour a tous,

    J'ai un formulaire qui contient 22 champs.

    Je parcours un formulaire et je dois comparer les cmaps et controler si un champs est précéder par un "f"

    Le nom d'un champs est par exemple

    data[User][name]
    Je dois controler si les 10 derniers champs on un f qui précede comme pare exemple
    data[User][fname]
    Comment puis-je faire ceci?

    Avez vous une idée?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    $('#UserFidentic').bind('change',function(){
        if($(this).is(":checked"))
            {
                // Copie  
                $('#UserMemberEditForm :input').each(function(index, elm){
    /* Controler ici si le champs avec un f existe et copy */              
           if($(elm.name).match('??????').length!=0){
              $(elm.name).match('??????').val() = $(elm.name).val();
    }
     
                })
            }
            else
            {
              // Efface
                $('#UserMemberEditForm :input').each(function(index, elm){
    /* Controler ici si le champs avec un f existe et efface*/              
           if($(elm.name).match('??????').length!=0){
              $(elm.name).match('??????').val() = "";
    }
     
                })
     
            }
    });
    En fait la problématique est

    Es-ce que le champs a un "f", qui commence dans la deuxieme accolade, si non, existe t il un autre identic, mais qui commence avec un "f", toujours dans la deuxieme acolade, si oui, alors copie la valeur du premier dans le deuxième (ou return true)

    ouf

    Milles mercis

  2. #2
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Bonsoir

    Pour le "f" dans les 10 premiers :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       if ( index < 10 && elm.name.slice( 0, 1 ) === "f" ){
           console.log( elm.name, $( elm.name ) );
       }
    Pour le reste je n'ai rien compris.

  3. #3
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 098
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 098
    Points : 946
    Points
    946
    Par défaut
    me retourne
    data[User][fstreetnb]
    donc je ne compreds pas comment ceci
    .slice( 0, 1 ) === "f" )
    peux detecter le f en premier position.

    Il faut aussi savoir que
    data[User]
    peut aussi etre
    data[Group] ou
    data[Baskets], etc
    dans un autre cas

  4. #4
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 098
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 098
    Points : 946
    Points
    946
    Par défaut
    En fait, j'ai trop compliqué le truc et je me suis trompé.
    C'est pas name qu'il faut comparé mais l'ID du champ!!!!!
    je m'excuse pour cette confusion

    Je reprend mon explication


    En fait je ne peux utiliser le chiffre 10, car je peux du coup en avoir plus ou moin. Ca peu varier.

    Pour être plus pris.

    Dans mon formulaire, je peux avoir 20 à 30 champs.
    La moitié sera par exemple, des champs qui prendront les information d' une adresse de domicile, l'autre moitié les champs d'une adresse de livraison. Si je clique sur le checkbox "adresse identique", il va copier a premiere moitié des valeurs champs, soit (nom, prenom, rue, ville, code postale etc) dans l'autre moitié.
    Afin de différencier les 2 moitié, la deuxieme moitilé aura un f.

    exemple, l'id des champs
    Es-ce que l'ID champs parcouru par each a un "F", si non, existe t il un autre identic, mais qui lui commence avec un "F", si oui, alors copie la valeur du premier dans le deuxième
    L'idée esr d'avoir donc un .each qui va parcourir tous l'id des champs. Quand il passe dans
    UserRue
    il va voir s'il y a un autre champs dont l'id a un F
    UserFrue
    et copie la valeur du camps avec l'ID
    UserFrue
    En soit ca ne change pas grand chose, dans la problématique sauf que les acolade ne rentre plus en compte

  5. #5
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut


    Avec $('#UserMemberEditForm :input').each(function(index, elm){ on devrait logiquement avoir un élément du DOM, un input, dans elm !

    Il me semble qu'il y a un problème de conception.

    Je regrouperais les éléments de l'adresse dans un fieldset "domicile" et dans un fieldset "livraison" (les mêmes inputs dans le même ordre, name différent par ajout d'un f) et si l'utilisateur coche "adresse identique" je recopierais simplement l'un dans l'autre. Bien entendu il faut du code qui vérifie que le fieldset domicile est bien rempli avant de montrer la case à cocher et le fieldset livraison. De même avant le "submit" et côté serveur, il doit y avoir des contrôles de cohérence.

    Exemple :

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <form>
        <fieldset id="domicile">
            <input type="text" name="nom">
            <input type="text" name="prenom">
            <input type="text" name="ville">
        </fieldset>
     
        <input id="AdrIdentiques" type="checkbox">
     
        <fieldset id="livraison">
            <input type="text" name="fnom">
            <input type="text" name="fprenom">
            <input type="text" name="fville">
        </fieldset>
    </form>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $( "#AdrIdentiques" ).on( "change", function(){
     
        if ( $( this ).is( ":checked" ) ){
     
            var jObj = $( "#livraison" ).find( "input" );
     
            $( "#domicile" ).find( "input" ).each( function( i, item ){
                jObj.eq( i ).val( $( item ).val() );
            });
        }
    });

  6. #6
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 098
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 098
    Points : 946
    Points
    946
    Par défaut
    Je te remercie pour ton aide, mais je bloque toujours.
    Je ne crois pas que ta solution m'aidera a moins que je me trompe

    En fait c'est comme ceci
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <form>
        <fieldset id="domicile">
            <input id="UserNom" type="text" name="nom">
            <input id="UserPrenom" type="text" name="prenom">
            <input id="UserVille" type="text" name="ville">
        </fieldset>
     
        <input id="AdrIdentiques" type="checkbox">
     
        <fieldset id="livraison">
            <input id="UserFnom" type="text" name="fnom">
            <input id="UserFprenom" type="text" name="fprenom">
            <input id="UserFville" type="text" name="fville">
        </fieldset>
    </form>

    J'aisse de faie avec .match() pour qu'il filtre les dernier caracteres
    ( J'ai remplé F par Li)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    $('#UserIdentique').bind('change',function(){
        if($(this).is(":checked"))
            {
                // Si cheké copie
     
    // Parcour tous les input            
    $('#UserMemberEditForm :input').each(function(index, elm){
                  if(elm.id.indexOf("Li") > -1){ 
     
     
                    //Si le il ne contien pas de Li dans l'ID affiche les id
                  }else{
                   console.log(elm.id'));
                    console.log( match('/Li'+elm.id+'$/'));
    // Et là je bloque. L'idée est d'utiliser match() pour lire les derniers caratece 
    //avec le li, comme par exemple
    // match('/Li'+elm.id+'$/')
    // Si un id d'un champ a le meme valeur que elm.id, précédé par Li alors donne lui la valeur de elm.value
     
    $("#"+elm.id.match('/Li'+elm.id+'$/')).value() = eml.value
                  }
                })
     
            }
            else
            {
              // Efface les champs
     
     
            }
    });
    mais ca bug, car je ne suis pas sur de la syntaxe de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $("#"+elm.id.match('/Li'+elm.id+'$/'))
    et non plus pas sure de .value()=

    Je cherche encore...

    Tu vois mon idée?

  7. #7
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 098
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 098
    Points : 946
    Points
    946
    Par défaut
    J'ai réussi en bidouillon
    Voic le truc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    $('#UserIdentique').bind('change',function(){
        if($(this).is(":checked"))
            {
     
     
                // Copie
     
                $('#UserMemberEditForm :input').each(function(index, elm){
                  if(elm.id.indexOf("Li") > -1){ 
     
     
                    //$("#"+elm.id).val(elm.value);
                  }else{
     
                    var va = elm.name.replace("][","-");
                    va = va.replace("[","-");
                    va = va.replace("]","");
                    va = va.split("-");
     
                    $("#"+va[1]+"Li"+va[2]).attr('value',elm.value);
     
    // Comment rafraichir le menu déroulant ici?
     
                  }
                })    
     
            }
            else
            {
              // Efface
                $('#UserMemberEditForm :input').each(function(index, elm){
                  if(elm.id.indexOf("Li") > -1){ 
     
                  }else{
     
                    var va = elm.name.replace("][","-");
                    va = va.replace("[","-");
                    va = va.replace("]","");
                    va = va.split("-");
     
                    $("#"+va[1]+"Li"+va[2]).attr('value',"");
     
                  }
                })
     
            }
    });
    J ai un dernier problème, le menu déroulant ne change pas, il ne se met pas à jour.

    Y-a-t-il moyen de rafraichir un menu <select>?

  8. #8
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 098
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 098
    Points : 946
    Points
    946
    Par défaut
    Résolu.
    je m'étais trompé dans le nom du select
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    $('#UserIdentique').bind('change',function(){
        if($(this).is(":checked"))
            {
                // Copie
     
                $('#UserMemberEditForm :input').each(function(index, elm){
                  if(elm.id.indexOf("Li") > -1){ 
     
                  }else{
     
                    var va = elm.name.replace("][","-");
     
                    console.log(elm.name+" "+elm.value);
                    va = va.replace("[","-");
                    va = va.replace("]","");
                    va = va.replace("_id","Id");
                    va = va.split("-");
     
                    console.log(va[2]);
     
                    $("#"+va[1]+"Li"+va[2]).attr('value',elm.value);
     
                  }
                })    
     
            }
            else
            {
              // Efface
                $('#UserMemberEditForm :input').each(function(index, elm){
                  if(elm.id.indexOf("Li") > -1){ 
     
                  }else{
     
                    var va = elm.name.replace("][","-");
                    va = va.replace("[","-");
                    va = va.replace("]","");
                    va = va.split("-");
     
                    $("#"+va[1]+"Li"+va[2]).attr('value',"");
     
                  }
                })
     
            }
    });
    Reste plus qu'à faire plus propre.

    Commentaire?

    Good night

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

Discussions similaires

  1. Comparer deux champs
    Par reeda dans le forum Zend_Form
    Réponses: 16
    Dernier message: 26/12/2008, 15h55
  2. Comparer deux champs concaténés
    Par mouaa dans le forum Langage SQL
    Réponses: 2
    Dernier message: 21/05/2008, 15h26
  3. Filtrer une table en comparant deux champs entre eux
    Par damene dans le forum Débuter
    Réponses: 13
    Dernier message: 12/04/2008, 19h10
  4. comparer deux champs d un formulaire
    Par williams59 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 21/12/2007, 11h38
  5. Editeur de recherche - comparer deux champs
    Par sscouby dans le forum 4D
    Réponses: 1
    Dernier message: 17/10/2007, 12h08

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