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 :

Affichage <select> après mise à jour des <option> [AJAX]


Sujet :

jQuery

  1. #1
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2020
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Affichage <select> après mise à jour des <option>
    Bonjour,

    Nouveau sur le forum je ne suis pas parvenu à trouver solution en fouillant sur le net. J'espère donc pouvoir trouver un peu d'aide parmi vous sur un problème d'affichage d'une balise <select multiple> après l'avoir mise à jour par AJAX.

    Sur une base de données, j'enregistre des fiches contenant différentes informations donc différents champs. Parmi ces champs se trouve la ou les "catégorie(s) de la fiche", sélectionnée(s) par le biais d'une balise <select multiple >.

    Pour créer la fiche tout va bien et voilà à quoi ressemble le <select multiple> une fois les catégories sélectionnées :

    Nom : bonne presentation categ.JPG
Affichages : 207
Taille : 12,6 Ko

    Mon problème survient lors de l'édition d'une fiche pour modification via l'affichage d'un <DIV> préalablement chargé et caché sur la page HTML principale où sont listées toutes les fiches.

    Toutes les données sont bien récupérées et tout fonctionne correctement mais l'affichage du <select multiple ="multiple"> devient cela :

    Nom : mauvaise presentation categ.JPG
Affichages : 140
Taille : 9,8 Ko

    Mon problème est que je ne parviens pas à afficher le <select multiple> avec les vignettes de chaque catégories comme sur la première image :

    Nom : bonne presentation categ.JPG
Affichages : 207
Taille : 12,6 Ko

    Avez vous une solution à proposer svp ?

    DIV où est injecté le code du <select multiple> (il est contenu dans le DIV initialement caché utilisé comme fenêtre d'édition)
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <div id="div-categ"></div>

    Script php appelé par ajax
    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
    <?php
        $response = array('status' => 0);
        
        $sql = "SELECT * from categories";                
        $rs = $conn->execute($sql);
        if ( $conn->Affected_Rows()) {
            $toutes_categories = $rs->getrows();
            $response['toutes_categories'] = $toutes_categories;
        }
        
        $sql = "SELECT * from f_categories WHERE FID = " .$conn->qStr($fid); 
        $rs = $conn->execute($sql);
        if ( $conn->Affected_Rows()) {
            $fiches = $rs->getrows();
            $fiche_categories = array();
            $i=0;
            foreach ($fiches as $key => $value){
                $fiche_categories[$i]=$value;
                $i++;
            }
            $response['fiche_categories'] = $fiche_categories;
        }
        
        echo json_encode($response);
        die();
    ?>
    Script ajax appelé par un bouton
    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
    48
    49
    50
    51
    52
    53
    54
    55
    $(document).ready(function(){
        $("body").on('click', "a[id*='edit_fiche_']", function(event) {
            event.preventDefault();
            var id = $(this).attr('id');
            var split = id.split('_');
            var fiche_id = split[2];
     
            $.post(base_url + '/ajax/admin_get_fiche', { fiche_id: fiche_id },
                function (response) {
                    if (response.status) {
     
                        //Réinitialiser les erreurs
                        $('.form-control').each(function(){
                            $(this).removeClass('error');
                        });
     
                        //Charger les données fiche
                        var fichecategories    = new Array();    
                        var toutescategories    = new Array();
                        fichecategories        = response.fiche_categories;
                        toutescategories    = response.toutes_categories;
                        out = '<select id="edit-category" name="edit-category[]" multiple style="width:100%";>';
                        for (var i in toutescategories) {
                            objall = Object.values(toutescategories[i]);
                            var match = 0;
                            for (var j in fichecategories) {
                                var objvid = Object.values(fichecategories[j]);
                                if (objall[0] == objvid[1]){
                                    match = 1;
                                }
                            }
                            if (match != 0){
                                out += '<option value="'+ objall[0] + '" selected="selected">'+ objall[1] +'</option>';    
                            } else {
                                out += '<option value="'+ objall[0] + '">'+ objall[1] +'</option>';
                            }
                        }
                        out += '</select>';
                        $('#div-categ').html(out);
     
                        //Ajuste la marge de gauche à une valeur entière - Centre
                        var modal_ml = parseInt(($(window).width()-$('#editModalDialog').width())/2);                    
                        $('#editModal').modal('show');
                        if ($(window).width()>768) {
                            $('#editModalDialog').css('margin-left',Math.floor(modal_ml)+'px');
                        }
                    } else {
                        Messenger().post({
                            message: 'Fiche <b>ID ' + fiche_id + '</b>: Echec d\'obtention des détails de la fiche !',
                            type: 'error'
                        });
                    }                
            }, "json");         
        });
    });

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 407
    Points : 4 847
    Points
    4 847
    Par défaut
    Bonjour,

    Utilises-tu un plugin jQuery qui gère les multiSelect ? si oui, il va falloir l'initialiser encore une fois dans le callback de succès :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ....
    out += '</select>';
    $('#div-categ')
    .html(out)//là tu remplies les données
    .find("select")//cibler les select dedans
    .NomPlugin()//réinitialise le plugin pour les <select>
    ....

  3. #3
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2020
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bonjour et merci pour cette réponse.

    Je n'utilise pas de plugin jQuery qui gère le multiSelect.

    Y-a-t-il une possibilité de faire autrement ? Si non possible de m'éclairer un peu plus car je n'excelle pas sur le sujet ?

  4. #4
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 407
    Points : 4 847
    Points
    4 847
    Par défaut
    La première image dans ton post montre bien les vignettes "Catégorie2" et "Catégorie4", comment sont-elles générées ?

    D'après ce que je vois, elles sont générées via un Plugin jQuery comme chosen par exemple.

  5. #5
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2020
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Oui effectivement après recherche j'utilise bien chosen.

    Du coup si je reprends ton code de départ ça donnerait cela ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $('#div-categ')
      .html(out)
      .find("select")
      .chosen();

  6. #6
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 407
    Points : 4 847
    Points
    4 847
    Par défaut
    Eh ben voilà, c'est bien le plugin chosen que t'utilises, et normalement le code que tu viens de poster fonctionnera sans soucis.

  7. #7
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2020
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Malheureusement ça ne fonctionne pas et ça bloque le script (le DIV d'édition de s'affiche pas)

  8. #8
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 407
    Points : 4 847
    Points
    4 847
    Par défaut
    Des erreurs qui s'affichent dans la console du navigateur ? Non ?...

  9. #9
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2020
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    C'est tout bon j'ai trouvé !

    J'ai la bébête select2 qui se baladait pas loin

    Du coup ça donne cela et tout fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $('#div-categ')
      .html(out)
      .find("select")
      .select2();
    Merci beaucoup Toufic83 tu m'ôtes une belle épine du pied !

  10. #10
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 407
    Points : 4 847
    Points
    4 847
    Par défaut
    C'est select2 que t'utilises et pas chosen

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/02/2019, 07h35
  2. [12c] Ecroulement des perf après mise à jour des statistiques
    Par r038tmp5 dans le forum Administration
    Réponses: 5
    Dernier message: 19/02/2016, 09h11
  3. Mise à jour des données d'une table avec un SELECT
    Par bouddine dans le forum Langage SQL
    Réponses: 0
    Dernier message: 20/05/2008, 16h36
  4. Réponses: 1
    Dernier message: 27/06/2007, 10h31
  5. Réponses: 2
    Dernier message: 21/04/2007, 20h19

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