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 :

Autocomplete : concaténation de valeurs [UI]


Sujet :

jQuery

  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut Autocomplete : concaténation de valeurs
    Bonjour,

    J'utilise jquery-ui pour l'autocompletion d'un champ qui concatène 3 valeurs : nom de rue, ville, code postal.

    Coté jquery, j'ai ainsi le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	$('input[name="evenement[nom]"]').autocomplete({
                source:    '/query_manager.php?ac_equipement=true',
                minLength: 3,
                select: function(event, ui) {
                }
            });
    et coté PHP :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    	$autocomplete = array();
     
    	$query = new LieuEquipementQuery();
    	foreach ($query->findByAutocomplete($get['term'], 10) as $equipement) {
    		$autocomplete[] = implode(' ', $equipement);
    	}
    	echo json_encode($autocomplete);

    Le problème que j'ai, c'est le "implode" écrit en PHP qui perd les informations sources pour les concaténer. Or, sur ma page HTML, j'ai par exemple le besoin simple de récupérer l'ID de l'enregistrement sélectionné, ou bien uniquement le nom de rue pour l'afficher quelque part, mais je ne vois pas comment faire.

    Auriez-vous des idées ?

  2. #2
    Membre confirmé Avatar de marcbuils
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2012
    Messages : 99
    Par défaut
    Bonjour bilbonec,

    Je t'avoue que je ne comprend pas forcément très bien ton problème, mais je pense que la solution est ici:
    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
    	$('input[name="evenement[nom]"]').autocomplete({
                source:    function( request, response ){
                                   $.ajax({
    					url: "/query_manager.php?ac_equipement=true",
    					dataType: "json",
    					data: {
    						term: request.term
    					},
    					success: function( data ) {
    						response( $.map( data.equipements, function( item ) {
    							return {
    								label: item.rue + ' ' + item.ville + ' ' + item.cp,
    								value: item.id
    							}
    						}));
    					}
    				});
                },
                minLength: 3,
                select: function(event, ui) {
                }
            });
    Sachant que ton PHP devrait ressembler à quelque chose comme ça:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    	$autocomplete = array();
     
    	$query = new LieuEquipementQuery();
            $autocomplete['equipements'] = $query->findByAutocomplete($get['term'], 10);
    	echo json_encode($autocomplete);
    ?>

    Ainsi tu récupères les éléments de manière indépendante au niveau du javascript (id, rue, cp, ville, ...) et tu peux faire les traitements et les concaténation que tu souhaites au niveau du javascript du coup.


    @++,

    Marc
    C'est bien ça que tu recherchais ?
    Pour moi, une informatique efficace est avant tout une informatique intuitive
    Liste de mes cours: http://marcbuils.developpez.com
    Si vous appréciez mon intervention, dite le avec le

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut
    C'est déjà beaucoup mieux (la vue se passe dans le code JS maintenant) !
    Par contre, peut-on accéder dans la partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select: function (event, ui)
    à ces informations nom, codepostal, etc. ?

  4. #4
    Membre confirmé Avatar de marcbuils
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2012
    Messages : 99
    Par défaut
    Il me semble en effet qu'on a accès aux informations dans la fonction select :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select: function (event, ui){
      // ui.item.rue, ui.item.ville, ui.item.cp...
    }
    Pour moi, une informatique efficace est avant tout une informatique intuitive
    Liste de mes cours: http://marcbuils.developpez.com
    Si vous appréciez mon intervention, dite le avec le

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut
    Merci pour cette piste, c'était effectivement pas loin de la solution !
    Après avoir tourné un peu autour de ce ui.item.value, il suffit en fait de surcharger les valeurs du return {} et de mettre toutes les données dont j'ai besoin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    return {
        label: item.rue + ' ' + item.ville + ' ' + item.cp,
        rue: item.rue,
        ville: item.ville,
        cp: item.cp
    }
    Et du coup elles deviennent accessibles dans le select :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select: function (event, ui) {
        // ui.item.rue, etc. 
    }
    Ou bien même plus proprement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    return {
        label: item.rue + ' ' + item.ville + ' ' + item.cp,
        objet: item
    }
    select: function (event, ui) {
        // ui.item.objet.rue, etc. 
    }
    Merci pour toute cette aide qui m'aura bien rendu service !! Difficile de trouver sur le net une doc qui me permette de trouver cette solution moi-même.

  6. #6
    Membre confirmé Avatar de marcbuils
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2012
    Messages : 99
    Par défaut
    Merci pour l'info,

    Il me semblait bien l'avoir déjà fait, mais je ne me rappelais plus vraiment de la méthode...

    Bonne continuation,

    Marc
    Pour moi, une informatique efficace est avant tout une informatique intuitive
    Liste de mes cours: http://marcbuils.developpez.com
    Si vous appréciez mon intervention, dite le avec le

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

Discussions similaires

  1. Concaténer les valeurs dans une boucle
    Par philippef dans le forum Langage
    Réponses: 4
    Dernier message: 28/08/2007, 20h08
  2. Réponses: 10
    Dernier message: 30/11/2006, 23h06
  3. Concaténer une valeur de zone de texte
    Par kaspar dans le forum Flash
    Réponses: 4
    Dernier message: 18/10/2006, 02h13
  4. Réponses: 2
    Dernier message: 13/09/2006, 23h18
  5. Réponses: 2
    Dernier message: 30/11/2004, 02h36

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