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 :

[Chosen] Choisir une option depuis un bouton sans perdre ceux déjà sélectionnés


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 70
    Par défaut [Chosen] Choisir une option depuis un bouton sans perdre ceux déjà sélectionnés
    Bonjour

    j'ai fait un formulaire pour créer un utilisateur et j'utilise avec le module chosen
    j'ai un autre formulaire pour choisir un utilisateur déjà existant et voir les groupes auquels ils appartient.
    en face de chaque groupe un lien href qui va choisir une option déjà présente dans la liste du premier formulaire

    jusque là ça va

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $('.add_ex_grp').on('click',function(){
    	var value_ex_grp = (this.id);
    	document.getElementById('ex_grp[]').value = (value_ex_grp);
    	$('.ex_grp').trigger('chosen:updated');
     
    });
    mais il m'efface les options déjà sélectionnés
    alors j'ai essayé çà

    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
     
    $('.add_ex_grp').on('click',function(){
    	var value_ex_grp = (this.id);
    	var selO = document.getElementsByName('ex_grp[]')[0];
        var selValues = [];
        for(i=0; i < selO.length; i++){
            if(selO.options[i].selected){
                selValues.push(selO.options[i].value);
            }
        }
     
    	console.log([selValues + ',' + value_ex_grp]);
    	document.getElementById('ex_grp[]').value = ([selValues + ',' + value_ex_grp]);
    	$('.ex_grp').trigger('chosen:updated');
     
    });

    mais je n'arrive pas à formater les valeurs pour qu'elles soient réinjecté sous le format (['groupe1', 'groupe2', 'groupe3'])

    Merci de votre aide

  2. #2
    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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    = "(['"+ selValues.join("','")  + "','" + value_ex_grp.join("','")+"'])";

    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    concat= [...selValues, ...value_ex_grp];
    .../...
    = "(['"+ concat.join("','")  + "'])";
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 70
    Par défaut
    Merci de votre réponse rapide mais j'ai cette erreur dans la console
    TypeError: value_ex_grp.join is not a function

  4. #4
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    Bonjour,

    Tout cela n'est pas d'une grande limpidité;
    Mais en tout cas, 2 lignes sont plutôt gênantes, syntaxiquement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var value_ex_grp = (this.id);
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('ex_grp[]').value = (value_ex_grp);
    Et un peu plus loin aussi;

    En plus, si j'ai bien lu, value_ex_grp n'est pas un tableau mais un id, d'où le message d'erreur;

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 70
    Par défaut
    merci pour vos indications
    alors j’ai fais ca et malgré que dans la console j’ai les donnees correctement formatés ca ne fonctionne pas

    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
     
    $('.add_ex_grp').on('click',function(){
     
    	var selO = document.getElementsByName('ex_grp[]')[0];
        var selValues = [];
        for(i=0; i < selO.length; i++){
            if(selO.options[i].selected){
                selValues.push(selO.options[i].value);
            }
        }
     
    	var value_ex_grp = (this.id);
    	var value_ex_grp_a = [];
    	value_ex_grp_a.push(value_ex_grp);
     
    	var arg1 = selValues.join("', '");
    	var arg2 = value_ex_grp_a;
    	var ex_grp_v = "'"+ arg1 + "', '" + arg2 +"'";
    	console.log(ex_grp_v);
    	$('.ex_grp').val([ex_grp_v]).trigger('chosen:updated');	
    });

  6. #6
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par défaut
    Bonjour fahdo,
    il y a quelques indices dans ton code qui laissent entendre que tu n’as pas entièrement saisi le fonctionnement de JavaScript. Par exemple ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var value_ex_grp = (this.id);
    Les parenthèses ne sont pas utiles. Quelle était ton intention quand tu les as mises ?

    Ça peut t’aider de comprendre que la propriété .value (ou son équivalent jQuery .val()) attend une chaîne (type "string"), et que tout ce que tu lui passes qui n’est pas une chaîne sera d’abord converti en chaîne.
    Donc si tu passes un tableau, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $('.ex_grp').val([ 'Babbage', 'Lovelace', 'Turing' ])
    Le tabeau est d’abord converti en chaîne, d’une manière pas forcément intuitive. Pour voir, tape ceci dans ta console :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [ 'Babbage', 'Lovelace', 'Turing' ].toString()
    // -> "Babbage,Lovelace,Turing"
    Comme tu peux le voir, le résultat est une chaîne (normal), contenant les éléments du tableau séparés par des virgules, sans espaces, sans guillemets, et sans crochets autour. Je pense que c’est quelque chose comme ça que tu as vu quand, dans ton premier post, tu as dit :
    mais je n'arrive pas à formater les valeurs pour qu'elles soient réinjecté sous le format (['groupe1', 'groupe2', 'groupe3'])
    Comme tu n’as pas le choix du type ("string"), si tu veux que les crochets restent, il faut les ajouter comme des bêtes caractères pour qu’ils fassent partie de la chaîne finale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    … .val('[' + ex_grp_v + ']')
    Après, moi je me pose la question : quel est l’intérêt d’avoir cette représentation exacte dans le rendu HTML ? Doit-elle être recopiée quelque part par l’utilisateur ? Dans ce cas, il y a sûrement moyen de simplifier le truc.

    En tout cas, garde bien à l’esprit que tout ce qui est « sorti » vers le visuel HTML est systématiquement converti en chaîne, que ce soit en tant que valeur d’<input>, ou via une propriété .textContent ou .innerHTML ou similaire.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/05/2016, 11h39
  2. [débutant] Appeler une action depuis un bouton dans une vue.
    Par Teaniel dans le forum Eclipse Platform
    Réponses: 5
    Dernier message: 11/02/2010, 16h30
  3. Comment provoquer le pack() d'une Jframe depuis un JPanel sans ref sur la JFrame
    Par cdtkoenig dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 21/07/2008, 19h11
  4. appel d'une requete depuis un bouton
    Par roblescriso dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 20/03/2008, 08h19
  5. lancer une fonction depuis un bouton
    Par olivnath dans le forum Tkinter
    Réponses: 2
    Dernier message: 30/05/2007, 10h16

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