javascript - Jquery UI autocomplete: both labels and values are behaving like values -
i'm working jquery ui's autocomplete.
the problem i'm having this: when work witih external data source, both label , value behave values.
in other words, when reference external data source, single label , value pair, both label , value appear in dropdown together, 2 choices.
in other words, both appear values, instead of appearing label , value.
when click on 1 of them, alert alert(ui.item.label); shows value, whether label, or value.
i can't see why label , value both behaving values, since i've marked in json source.
the problem not occur local data source, external one.
here's local code:
<script> $(document).ready(function() { $("#inputbox").autocomplete({ source: "sd/aa.php", minlength: 3, select: function(event, ui) { alert(ui.item.label); alert(ui.item.value); } }); }); </script> <input id="inputbox" />
the why...maybe
when using jquery autocomplete, expects specific properties label , value when using complex objects.
for example, object has custom properties, id , description, autocomplete label , value property. if define label or value property, use property both label , value displayed.
the external service should return object looks so:
[{ //your custom properties id: 78923, description: 'a nice widget', //below autocomplete specific properties label: 'nice widget a', value: '$19.99' }]
possible solutions
- the first way work adjust service add label , value property json returned client.
the second way, if don't have control on service, make ajax call instead , in success event function, can manually map results , extend objects new properties.
... source: function (request, response) { $.ajax({ url: "/my/service?term=" + escape(request.term), type: "get", contenttype: "application/json", datatype: "json", success: function (data) { var mappedresults = $.map(data, function (item) { //extend service data label , value property autocomplete uses return $.extend(item, { label: item.description, value: item.id }); }); response(mappedresults); } }); } ...
this useful if wish use other values provided service else. these can accessed through of events of autocomplete function in form of ui.item.[yourproperty]
. if gave callback select
event of autocomplete widget, access description via ui.item.description
.
Comments
Post a Comment