Estou tendo problemas para tentar fazer o autocompletar funcionar corretamente.
Tudo parece ok para mim, mas ....
<script>
$(function () {
$("#customer-search").autocomplete({
source: 'Customer/GetCustomerByName',
minLength: 3,
select: function (event, ui) {
$("#customer-search").val(ui.item.label);
$("#selected-customer").val(ui.item.label);
}
});
});
</script>
<div>
<input id="customer-search" />
</div>
@Html.Hidden("selected-customer")
No entanto, quando seleciono um item da lista suspensa, o valor é aplicado à caixa de texto em vez do rótulo.
O que eu fiz errado?
Se eu olhar a fonte usando o firebug, posso ver que meu campo oculto está sendo atualizado corretamente.
Respostas:
O comportamento padrão do
select
evento é atualizarinput
comui.item.value
. Este código é executado após seu manipulador de eventos.Basta retornar
false
ou ligarevent.preventDefault()
para evitar que isso ocorra. Eu também recomendaria fazer algo semelhante para ofocus
evento para evitar que eleui.item.value
seja colocado noinput
enquanto o usuário passa o mouse sobre as opções:Exemplo: http://jsfiddle.net/andrewwhitaker/LCv8L/
fonte
$("#selected-customer").val(ui.item.value);
label
vez dovalue
.focus
vez deselect
. O problema estáitem.value
sendo definido em vez deitem.label
. Como contornar isso?lookup.autocomplete({ source: data, focus: function(event, ui) { event.preventDefault(); $(this).val(ui.item.label) status.text(ui.item.value) submitted.text(ui.item.submitted) comments.html(ui.item.comments) } })
Apenas gostaria de adicionar que, em vez de referenciar o elemento de entrada por "id" dentro das funções de retorno de chamada de seleção e foco , você pode usar este seletor, como:
é útil quando você atribui preenchimento automático para vários elementos, ou seja, por classe:
fonte
No meu caso, preciso registrar outro campo 'id' em uma entrada oculta. Portanto, adiciono outro campo aos dados retornados da chamada ajax.
E adicionou um link 'criar novo' na parte inferior da lista. Ao clicar em 'criar novo', um modal aparecerá e você poderá criar um novo item a partir dele.
Acho que a questão é que você pode adicionar qualquer campo de dados extra além de apenas 'rótulo' e 'valor'.
Eu uso o modal bootstrap e pode ser o seguinte:
fonte