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 :

Clone avec jQuery


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 17
    Par défaut Clone avec jQuery
    Bonjour à tous,

    Je viens vers vous car j'ai un petit soucis. J'aimerais pouvoir ajouter des select comme dans le code si dessous avec "clone" cependant sa clone bien mais impossible de choisir une nouvelle valeur.

    Qu'est ce qui pose problème ?

    Merci


    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
     
    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.4/jquery.mobile-1.4.4.min.css">
     
    <script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
    <script src="http://code.jquery.com/mobile/1.4.4/jquery.mobile-1.4.4.min.js"></script>
     
    <link rel="stylesheet" href="css/mobile.css">
    <script src="http://code.jquery.com/jquery-1.8.2.min.js">
    </script>
    <script type="text/javascript">
    $(document).ready(function() {
         $('select.cat:last').live('change',function(){
              if( $(this).val() != '' )
              {
                   $(this).parent().clone(true).insertAfter($(this).parent());
              }
         });
    });
    </script>
     
     <label for="categorie">Choisissez une catégorie :</label>
    <select class="cat" name="categorie[]">
              <option>Sélectionnez une catégorie</option>
              <option value="jquery">JQuery</option>
              <option value="html">HTML</option>
              <option value="php">PHP</option>
              <option value="css">CSS</option>
         </select>

  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
    Billets dans le blog
    125
    Par défaut
    Bonsoir

    Je ne comprends pas le code (live est obsolète depuis la mort de Mathusalem ).

    Je ne connais pas UI Mobile. En jQuery classique et non obsolète, pour dupliquer le select à partir de l'option sélectionnée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $( function(){
     
        $( "select.cat:last" ).on( "change", function(){
            if( $( this ).val() != '' ){
                var jObj = $( "option:selected", this ).parent();
     
                jObj.clone( true, true ).insertAfter( jObj );
            }
        });
     
    });

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 17
    Par défaut
    Exact danielhagnoul depuis la version 1.7

    donc j'ai remplacé par 'on'

    ce qui donne :

    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
    <script type="text/javascript">
    $(document).ready(function() {
         $('select.cat:last').on('change',function(){
              if( $(this).val() != '' )
              {
                   $(this).parent().clone(true).insertAfter($(this).parent());
              }
         });
    });
    </script>
     
     <label for="categorie">Choisissez une catégorie :</label>
    <select class="cat" name="categorie[]">
              <option>Sélectionnez une catégorie</option>
              <option value="jquery">JQuery</option>
              <option value="html">HTML</option>
              <option value="php">PHP</option>
              <option value="css">CSS</option>
    </select>
    Cependant chez moi il ne change pas de valeur.

    Je m'explique par une image :

    Nom : Capture.JPG
Affichages : 81
Taille : 13,0 Ko

    J'ai beau sélectionner une autre valeur, il ne me valide que celui du 1er select.

    Merci


    PS: La prochaine fois je ferais gaffe au rubrique. Merci pour le déplacement.

  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
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $(this).parent().clone(true).insertAfter($(this).parent());
    Dans le code que tu montres, $(this) correspond au select qui n'a pas de parent donc l'instruction est un peu compliquée à comprendre.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  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
    Billets dans le blog
    125
    Par défaut
    Bonjour

    Je crois avoir compris que :

    1. Chaque "select" ayant la classe "cat" doit avoir un gestionnaire "change" pour tenir compte du choix de l'utilisateur de la page web.
    2. La dernière occurrence du "select" ayant la classe "cat" doit produire un clone la première fois que l'on y sélectionne une valeur.
    3. Le clone doit afficher l'option sélectionnée dans son géniteur.


    Pour obtenir ce résultat, il faut deux gestionnaires d'événement "change", un classique et un nommé qui ne sert qu'au clonage. Les codes ci-dessous font ce travail, j'ai testé. Avant de vouloir l'adapter à vos besoins, vous devez faire un test uniquement en copiant-collant, sinon j'aurais certainement droit à un : "ça ne marche pas".

    Code CSS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    label { display: block; margin: 12px; }
    select { margin: 12px; }

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <label>Change = <output id="result"></output></label>
    <label>Choisissez une catégorie : 
        <select class="cat" name="categorie[]">
            <option>Sélectionnez une catégorie</option>
            <option value="jquery">JQuery</option>
            <option value="html">HTML</option>
            <option value="php">PHP</option>
            <option value="css">CSS</option>
        </select>
    </label>

    Code JS : 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
    $( function(){
     
        $( "body" ).on( "change.clone", "select.cat:last", function(){
            var str = $( this ).val();
     
            if( str != '' ){
                var jObjSelect = $( this ),
                    jObjClone = jObjSelect.clone();
     
                jObjSelect.off( "change.clone" );
     
                jObjClone
                    .val( str )
                    .insertAfter( jObjSelect );
            }
        });
     
        $( "body" ).on( "change", "select.cat", function(){
            $( "#result" ).text( $( this ).val() );
        });
     
    });

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

Discussions similaires

  1. controle d'un champ e_mail avec Jquery
    Par ranell dans le forum jQuery
    Réponses: 3
    Dernier message: 23/05/2008, 09h57
  2. Réponses: 6
    Dernier message: 22/04/2008, 18h29
  3. [débutant] clone avec un vector
    Par yupa dans le forum C++
    Réponses: 4
    Dernier message: 19/10/2007, 22h20
  4. [js]problèmes avec jquery
    Par pomgnon dans le forum jQuery
    Réponses: 3
    Dernier message: 30/03/2007, 20h47
  5. [JQUERY] Comment appeler une fonction php avec jquery
    Par popogendarme dans le forum jQuery
    Réponses: 1
    Dernier message: 20/03/2007, 16h07

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