2010-05-25 18 views
35

Ist es möglich, die Eingabe von freiem Text in das JQuery UI Autocomplete-Widget zu verbieten?Autocomplete verbieten kostenlose Texteingabe?

zB Ich möchte nur den Benutzer aus der Liste der Elemente auswählen können, die in der Autocomplete-Liste angezeigt werden, und nicht möchten, dass sie in der Lage sind, etwas zufälligen Text zu schreiben.

Ich habe nichts in den Demos/Docs gesehen, die beschreiben, wie man das macht.

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

Ich bin mit dem automatischen Vervollständigung wie diese

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

Antwort

3

Eine Möglichkeit wäre, eine zusätzliche Validierung einreichen auf Formular verwenden (wenn Sie ein Formular verwenden) einen Fehler zu markieren, wenn der Text nicht einer der gültigen Option.

Eine andere Möglichkeit wäre, an das Änderungsereignis der Autovervollständigung anzuhängen, das ausgelöst wird, selbst wenn keine Optionen ausgewählt sind. Sie können dann eine Validierung durchführen, um sicherzustellen, dass die Benutzereingabe in Ihrer Liste ist, oder einen Fehler anzeigen, wenn dies nicht der Fall ist.

+0

Ich ging mit dem Ereignis .change(), es war einfacher und schneller als der Versuch, die Combobox-Lösung zu ändern. –

+0

@Neils wies unter einem anderen Antwort aus und arbeitete wie ein Charme ändern. Funktion (Ereignis, ui) { if (ui.item == null) { $ ("# your_input_box") val (''); $ ("# your_input_box"). Focus(); } } – Sandeep

8

Wenn Sie den Benutzer wollen aus der Liste den Eintrag, nur um dann die automatische Vervollständigung Combobox verwenden.

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

HTH

+4

Sie können immer noch in das eingeben, das ist genau das, was er sagte, er wollte nicht. –

+1

Nein, ich glaube nicht, dass er das will. Ich denke, er will es von dem Punkt aus der Liste holen, dh wenn der Benutzer beginnt, "Ja" einzugeben, dann wenn er "Java" und "Javascript" auflistet, möchte er, dass der Benutzer aus einem von ihnen auswählt und nicht "Jab" "und übermitteln. – Raja

+1

Nein, ich sagte Autocomplete, was bedeutet, dass Tippen erlaubt ist. Die Eingabe muss jedoch auf Elemente in der Autocomplete-Liste beschränkt sein. Das Combobox-Beispiel macht genau das. –

-2

Was ist mit der Option mustMatch?

'Wenn der Wert auf' true 'gesetzt ist, werden nur Ergebnisse vom Auto-Completer angezeigt, die vom Back-End angezeigt werden. Beachten Sie, dass ungültige Werte zu einem leeren Eingabefeld führen.

+1

'mustMatch' ist eine Option aus obsoleten jQuery Autocomplete-Plugin, dieses Thema ist über jQuery-ui Autocomplete-Komponente. –

0

Ich benutzte das Combobox-Modul, das Ihnen einen "Pfeil nach unten" -Button gibt. Dann zum Eingangs-Tag fügen Sie einfach das folgende zum Eingangs-Tag um die Linie 41 hinzu (abhängig von Ihrer Version der Combobox http://jqueryui.com/demos/autocomplete/#combobox)

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

Fügen Sie dann Code hinzu, damit der Benutzer, wenn er auf das Eingabefeld klickt, die Dropdown-Liste anzeigt.

Für meine Zwecke habe ich ein Readonly-Flag hinzugefügt, das ich in das Modul eingeben kann. Wenn ich es nur lesen muss, kann ich es auch ein-/ausschalten.

0

Alte Frage, aber hier:

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

Nach den API documentation, der change Veranstaltung ui Eigenschaft ist null, wenn der Eintrag nicht aus der Liste gewählt wurde, so dass Sie frei Text so einfach wie dies nicht zulassen können:

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

Arbeitete für mich, nette :) – littledynamo

+2

Arbeitete auch für mich;) – bungdito

+2

'ändern: (e, ui) -> ($ '#input_box'). Val (''). Focus() wenn nicht ui.item' für die Coffeescripters. –

-1

Die Combobox Option funktioniert gut, wenn Sie eine Setlist verwenden, aber wenn Sie eine dynamisch generierte Liste über eine json bekommen haben, dann können Sie nur die Daten auf Änderung erfassen.

Vollständiges Beispiel mit zusätzlichen Parametern unten.

 $("#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         
     });