2011-09-16 14 views
5

Próbuję dowiedzieć się, jak zrobić "przeciwny" wybór jquery ui. Kiedy ktoś nie wybierze opcji i po prostu wpisuje "jquery something" wynik będzie: "nowe wejście: jquery coś". Jednak po wybraniu "jquery" byłoby miło jakoś mieć tylko "wybrany z listy: jquery" i zapobiec propagacji keypress. Oba zdarzenia wybuchają. Próbuję to uczynić jednym lub drugim.jquery ui autouzupełnianie: wyzwalacz tylko wtedy, gdy element nie jest wybrany

<input class="test" type="text" /> 

<script> 
$('.test').autocomplete({ 
    select: function (event, ui) { 
     alert('selected from list: ' + ui.item.label); 
     event.preventDefault(); 
     return false; 
    }, 
    source: ["jquery", "jquery ui", "sizzle"] 
}); 
$('.test').live('keypress', function (e) { 
    if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) { 
     alert('new input: ' + $(this).val()); 
    } 
}); 
</script> 

Dzieje się tak przy założeniu, że klawisz "enter" służy do wybierania opcji z menu interfejsu użytkownika.

+0

Kiedy uruchamiam to, to pokazuje jak klucze typ, ale jeśli wybiorę wartość, nie pokazuje żadnych naciśnięć klawiszy, nawet za pomocą klawiszy strzałek. Proszę wyjaśnić kwestię, lub przynajmniej powiedz mi, jakie jest jej ostateczne wykorzystanie, aby lepiej zrozumieć, jak pomóc. –

+0

Zmienię to, aby ostrzec. Console.log służy do firebug. Utwórz także swoje wpisy za pomocą klawisza "Enter". – Parmenides

Odpowiedz

8

Możesz to zrobić, używając zdarzenia autocompletechange. Korzystanie z tego zdarzenia, można określić, czy użytkownik wybrał opcję lub wpisany w coś, że nie było na liście:

$("#auto").autocomplete({ 
    source: ['hi', 'bye', 'foo', 'bar'], 
    change: function(event, ui) { 
     console.log(this.value); 
     if (ui.item == null) { 
      $("span").text("new item: " + this.value); 
     } else { 
      $("span").text("selected item: " + ui.item.value); 
     } 
    } 
}); 

Przykład:http://jsfiddle.net/Ne9FH/

+1

Byłoby świetnie, gdybym mógł wywołać zdarzenie zmiany z naciśnięciem klawisza i dynamicznym źródłem danych. Ale najlepsza odpowiedź tutaj, i nie wspomniałem nic o źródle danych. – Parmenides

Powiązane problemy