2012-05-29 6 views
7

Ho bisogno di fare quanto segue usando una combobox.Come utilizzare una combobox con completamento automatico jQuery con dati JSON AJAX?

  • Select box ha un elenco predefinito di città da cui l'utente può cercare.
  • Se un utente digita il testo nella casella input, è necessario effettuare una chiamata ajax per recuperare i dati e visualizzare le opzioni per l'utente.
  • Se i dati è stato recuperato per la richiesta dell'utente, quelle città deve essere aggiunta alle opzioni di Select box

Uso jQuery autocomplete sono in grado di recuperare i dati JSON su utente inserendo una stringa e la visualizzazione dei risultati. Tuttavia, sono abbastanza all'oscuro su come integrare questo utilizzando la combobox.

Combobox utilizza una matrice di dati statici per ricercare e se ho capito bene, utilizza espressioni regolari per abbinare i valori. Tuttavia, come lo interrompo e utilizzo la chiamata ajax per recuperare i dati dal server e aggiornare i risultati?

completamento automatico per la casella di testo di input:

$("#searchDestination").autocomplete({ 
     delay: 500, 
     source: function(request, response) { 
      $.ajax({ 
       url: "/wah/destinationsJson.action", 
       dataType: "json", 
       data: { 
        term: request.term 
       }, 
       type: "POST", 
       success: function(data){ 
        if(data.cities.length == 0) 
         return response(["No matching cities found for " + request.term]); 
        response($.map(data.cities, function(item){ 
         return{ 
          label: item.name, 
          value: item.name 
         }; 
        }) 
        ); 
       } 
      }); 
     }, 
     minLength: 2 

    }); 
    }); 
+0

come sono i dati di completamento automatico? –

+0

@ltiong_sh Il mio completamento automatico per la casella di testo di input semplice funziona bene con JSON. (aggiornato però la mia risposta) – brainydexter

+0

quando si dice che la lista scaricata dovrebbe essere aggiunta all'elenco di default, vuol dire che gli elementi predefiniti saranno sempre visibili, o verranno filtrati anche ... in base all'input dell'utente? –

risposta

2

Questo può aiutare .. another autocomplete plugin che ho usato.

visualizzato anche this

Se si desidera caricare i dati in modo dinamico nel campo di testo, andare con sopra plugin. Altrimenti se vuoi andare con la casella combinata, poi carica i dati su ready() e usa il plugin jquery auto complete!

+1

Speravo di estendere/riutilizzare la casella combinata sul sito jquery stesso. Inoltre, non è possibile caricare tutti i dati onReady dal momento che contiene un sacco di dati. È necessario eseguire la ricerca del prefisso in base al prefisso specificato nella casella di testo di input. – brainydexter

+0

Perché dovrebbe essere necessariamente una casella combinata e perché non un campo di testo? – Jebin

+0

Il mio requisito è tale che ho bisogno sia di un campo di testo che funziona come un completamento automatico basato sulla corrispondenza del prefisso e di una casella combinata che fornisce tutte le opzioni. – brainydexter

0

Perché non duplicare il plugin e due caselle combinate.

Poi:

 $("#combobox1").combobox1({ 
      select: function (event, ui) { 
      var value = ui.item.value;/*Whatever you have chosen of this combo box*/ 
      $.ajax({ 
       type: "POST", 
       dataType: 'json', 
       url: "script.php", 
       data: { 
       'anything':value 
       }, 
       success: function(res) 
       { 
       /*replace your next combo with new one*/ 
       $("select#combobox2").html(res); 
       } 
      }); 
     } 
    }); 
    $("#toggle").click(function() { 
    $("#combobox1").toggle(); 
    }); 

    $("#combobox2").combobox2(); 

    $("#toggle").click(function() { 
    $("#combobox2").toggle(); 
    }); 

file PHP (Questo si basa su Codeigniter):

<?php 
    $data['response'] = 'false'; 
    $keyword = $_POST['anything']; 
    $query4 = $this->db->query("SELECT * FROM table WHERE field='".$keyword."'"); 
    $data.= "<option></option>"; 
    if($query4->num_rows() > 0) 
    { 
     foreach($query5->result_array() as $row) 
     { 
     $data.= "<option>".$row['something']."</option>"; 
     } 
    } 
    echo json_encode($data); 
} 
?> 

Spero che questo aiuti.