Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Autocomplete applying value not label to textbox

Im having troubles trying to get the autocomplete to work properly.

It all looks ok to me but....

<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") 

However when I select an item from the dropdown the value is been applied to the textbox instead of the label.

What have I done wrong?

If I look at the source using firebug I can see that my hidden field is being updated correctly.

like image 263
Diver Dan Avatar asked Oct 04 '11 03:10

Diver Dan


1 Answers

The default behavior of the select event is to update the input with ui.item.value. This code runs after your event handler.

Simply return false or call event.preventDefault() to prevent this from occurring. I would also recommend doing something similar for the focus event to prevent ui.item.value from being placed in the input as the user hovers over choices:

$("#customer-search").autocomplete({     /* snip */     select: function(event, ui) {         event.preventDefault();         $("#customer-search").val(ui.item.label);         $("#selected-customer").val(ui.item.label);     },     focus: function(event, ui) {         event.preventDefault();         $("#customer-search").val(ui.item.label);     } }); 

Example: http://jsfiddle.net/andrewwhitaker/LCv8L/

like image 105
Andrew Whitaker Avatar answered Oct 03 '22 22:10

Andrew Whitaker