2010-05-25 13 views
35

E 'possibile non consentire l'immissione di testo libero nel widget JQuery UI autocomplete?completamento automatico non consentire l'immissione di testo libero?

ad es. Desidero solo che l'utente sia autorizzato a selezionare dall'elenco di elementi presentati nell'elenco di completamento automatico e non desidera che siano in grado di scrivere del testo casuale.

Non ho visto nulla nelle demo/documenti che descrivono come farlo.

http://jqueryui.com/demos/autocomplete/

sto usando completamento automatico come questo

$('#selector').autocomplete({ 
    source: url, 
    minlength: 2, 
    select: function (event, ui) { 
     // etc 
    } 

risposta

3

Un modo potrebbe essere quello di utilizzare una convalida aggiuntiva sulla forma presentare (se si utilizza un modulo) per evidenziare un errore se il testo non è una delle opzioni valide.

Un altro modo sarebbe quello di allegare all'evento di modifica del completamento automatico che verrà generato anche se non è selezionata un'opzione. È quindi possibile fare validazione atto a garantire l'input dell'utente è nella tua lista o visualizzare un errore se non lo è.

+0

Sono andato con l'evento .change(), era più facile e più veloce di provare a cambiare la soluzione di combobox per adattarla. –

+0

@Neils rilevare sotto un'altra risposta e che ha funzionato come un fascino cambiamento:. La funzione (evento, ui) { se (ui.item == null) { $ ("# your_input_box") val (''); $ ("# your_input_box"). Focus(); } } – Sandeep

8

Se si desidera che l'utente per ottenere solo la voce dalla lista quindi utilizzare combobox completamento automatico.

http://jqueryui.com/demos/autocomplete/#combobox

HTH

+4

È ancora possibile digitare in che, è esattamente ciò che ha detto che non voleva. –

+1

No, non penso che lo voglia. Penso che voglia ottenerlo dall'elemento dalla lista, cioè se l'utente inizia a digitare "Ja", quindi se elenca "Java" e "Javascript" allora vuole che l'utente selezioni da uno di essi e non digiti "Jab "e inviare. – Raja

+1

No Ho detto completamento automatico, il che implica che è consentita la digitazione. Ma la digitazione deve essere limitata solo agli elementi nell'elenco di completamento automatico. L'esempio di combo fa esattamente questo. –

-2

Che dire di opzione mustMatch?

'Se impostato su true, il completamento automatico consente solo i risultati presentati dal back-end. Si noti che i valori illegali risultano in una casella vuota '.

+1

'mustMatch' è un'opzione da obsoleto plugin di completamento automatico jQuery, questo argomento riguarda il componente di completamento automatico jQuery-ui. –

0

Ho utilizzato il modulo della casella combinata che fornisce un pulsante "freccia giù". Quindi al tag di input, aggiungi quanto segue al tag di input intorno alla riga 41 (a seconda della versione della combobox http://jqueryui.com/demos/autocomplete/#combobox)

input.attr ("readonly", "readonly");

Quindi aggiungere il codice in modo che se l'utente fa clic sulla casella di input, verrà visualizzato l'elenco a discesa.

Per i miei scopi, ho aggiunto un flag di sola lettura che posso passare al modulo, quindi se ho bisogno di leggerlo, posso anche accenderlo/spegnerlo.

0

vecchia questione, ma qui:

var defaultVal = ''; 
    $('#selector').autocomplete({ 
     source: url, 
     minlength: 2, 
     focus: function(event, ui) { 
      if (ui != null) { 
       defaultVal = ui.item.label; 
      } 
     }, 
     close: function(event, ui) { 
      $('#searchBox').val(defaultVal); 
     } 
    }); 
69

Secondo il API documentation, di proprietà della manifestazione changeui è nullo se la voce non è stato scelto dalla lista, in modo da poter impedire il testo gratuito semplicemente come questo:

change: function(event,ui) 
     { 
     if (ui.item==null) 
      { 
      $("#your_input_box").val(''); 
      $("#your_input_box").focus(); 
      } 
     } 
+4

Ha funzionato per me, bello :) – littledynamo

+2

Ha funzionato anche per me;) – bungdito

+2

'cambia: (e, ui) -> ($ '#input_box'). Val (''). Focus() se non ui.item' per i Coffeescripters. –

-1

L'opzione casella combinata funziona bene se si utilizza un set list, se si dispone di un elenco generato dinamica tramite un jSON ottenere, allora si può acquisire solo i dati sul cambiamento.

Esempio completo con parametri aggiuntivi di seguito.

 $("#town").autocomplete(
     {  
      select: function(event, ui) { 
       $("#town").val(ui.item.value); 
       return false; 
      },   
      focus: function(event, ui) { 
        $("#town").val(ui.item.label); 
        return false; 
       },   
      change: function(event, ui) { 
       if (!ui.item) { 
        $("#town").val(""); 
       } 
      }, 
      source: function(request, response) { 
       $.ajax({ 
        url: 'urltoscript.php', 
        dataType: "json", 
        data: { 
         term : request.term, 
         country : $("#abox").val() // extra parameters 
        },       
        success: function(data) { 
         response($.map(data,function (item) 
         {         
          return { 
           id: item.id, 
           value: item.name 
          }; 
         })); 
        } 
       }); 
      }, 
      minLength: 3 
      , highlightItem: true         
     }); 
Problemi correlati