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 + autopopulate en jQuery?


Sujet :

jQuery

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Mai 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 3
    Par défaut Autocomplete + autopopulate en jQuery?
    Bonjour à tous,

    Je vous explique ce que j'aimerais faire.

    J'ai deux champs select: un champ pays et un champ sous-pays.
    Le deuxième champ se fait en fonction du premier (selon le pays qu'on choisit, les sous-pays affichés ne seront pas les mêmes).

    Voici à quoi ressemble un bout de mon .json:

    {
    "Géorgie": "Abkhazie,Batoum",
    "Djibouti": "Afars et Issas,Côte des Somalis",
    "Iles Cook": "Aitutaki,Penrhyn"
    }

    Voici à quoi ressemble mon HTML:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <div id="page-wrap">
      <h1>Pays</h1>
     
      <select id="json-one">
        <option selected value="base">Please Select</option>
      </select><br />
     
      <select id="json-two">
        <option>Please choose from above</option>
      </select>
    </div>
    J'utilise le script suivant pour récupérer les pays de mon .json:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $.getJSON("jsondata/data2.json", function (data) {
        $.each(data, function (i, item) {
          $('<option>', {
            value: string_to_slug(i),
            html: i + '</option>'
          }).appendTo('select[id="json-one"]');
        });
      });
    Ensuite, j'utilise ce script pour peupler automatiquement mon 2ème champ (champ sous-pays) en fonction du 1er (champ pays):

    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
    $("#json-one").change(function() {
     
      var $dropdown = $(this);
      $.getJSON("jsondata/data2.json", function(data2) {
     
        $("#json-one")
        var key = $dropdown.val();
        var vals = [];
     
        switch(key) {
          case 'georgie':
          vals = data2["Géorgie"].split(",");
          break;
     
          case 'djibouti':
          vals = data2["Djibouti"].split(",");
          break;
     
          case 'iles-cook':
          vals = data2["Iles Cook"].split(",");
          break;
     
          case 'base':
          vals = ['Please choose from above'];
        }
     
        var $jsontwo = $("#json-two");
        $jsontwo.empty();
        $.each(vals, function(index, value) { 
     
          $jsontwo.append("<option>" + value + "</option>");
        });
      });
    });
    J'utilise également cette fonction pour mettre en minuscules toutes mes value de options, enlever les accents, remplacer les parenthèses et les espaces par des "-":

    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
    function string_to_slug(str) {
      str = str.replace(/^\s+|\s+$/g, ''); // trim
      str = str.toLowerCase();
     
      // remove accents, swap ñ for n, etc
      var from = "àáäâèéëêìíïîòóöôùúüûñç·/_,:;";
      var to   = "aaaaeeeeiiiioooouuuunc------";
      for (var i=0, l=from.length ; i<l ; i++) {
     
        str = str.replace(new RegExp(from.charAt(i), 'g'), to.charAt(i));
      }
     
      str = str.replace(/[^a-z0-9 -]/g, '') // remove invalid chars
      .replace(/\s+/g, '-') // collapse whitespace and replace by -
      .replace(/-+/g, '-'); // collapse dashes
     
      return str;
    }
    J'aimerais maintenant, grâce à de l'autocomplete, pouvoir taper le début d'un pays ou d'un sous-pays et avoir le résultat qui s'affiche comme dans cet exemple: http://dhtmlx.com/docs/products/dhtmlxCombo/index.shtml (le champ "Filtering mode").

    Est-ce quelqu'un aurait une idée?

    Merci!

  2. #2
    Membre éclairé
    Inscrit en
    Avril 2010
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 342
    Par défaut
    Ta fonction qui charge les pays ou les sous pays dois se trouver dans l’évènement keyup du champ ou du comboBox concerné, du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $('#MonComboBox').keyup(function () {
          //Ici tu appelle le JSON qui récupère dans la BD les pays ou les sous pays ayant les première lettres saisis dans ce champ comme paramère, ce qui te chargera le comboBox au fur et a mesure que l'utilisateur tapera ou effacera un mot
     
    });
    Et au niveau du Serveur du fait juste ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //Tu récupère le mot saisi a chaque fois
    $motSaisi=(isset($_GET['motSaisi'])) ? $_GET['motSaisi'] : Null;
    $motSaisi='%'.$motSaisi.'%';
    $requete = "SELECT nomPays FROM `pays` WHERE nomPays LIKE '$motSaisi'";
    Maintenant lorsque tu fais ça, quand l'utilisateur saisira un mot s'il ne trouve rien, la liste affichera selon le choix précédent, pour qu'il affiche le vide au cas où le choix ne renvoi rien, tu devra tester si aucun enregistrement n'a été renvoyé, tu renvoi le vide à JSON sinon tu renvoi l'objet JSON
    Du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $nombrePays=mysql_num_rows($resultat);
     
    if($nombrePays) {
    	while ($row = mysql_fetch_array($resultat)) {
    		$listePays[] = array(
    			'nomPays' => $row['nomPays'],
    		  );
    	}
    }
    else {
    $listePays="";
    }
     
    echo json_encode($listePays);

    Hope this will help

Discussions similaires

  1. Autocomplete + autopopulate en jQuery?
    Par YuukoChan dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 19/06/2012, 09h50
  2. Réponses: 1
    Dernier message: 14/09/2011, 15h27
  3. Autocomplete jquery
    Par saryry dans le forum jQuery
    Réponses: 5
    Dernier message: 20/07/2009, 19h07
  4. JQuery autocompletion asp.net
    Par M.Mounir dans le forum jQuery
    Réponses: 1
    Dernier message: 18/04/2009, 17h23
  5. Autocompletion, passer de prototype à jquery
    Par ZeRouxXx dans le forum jQuery
    Réponses: 2
    Dernier message: 09/12/2008, 11h19

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