Autocomplete ui и this в его событиях.
Доброго времени. У меня задача сделать что-нибудь типа вот такой вот штуки, как здесь в примере "2. Multiple choose"
Из формы нужно отправлять не введенные в инпут аутокомплита Слова, а их кодовые обозначения, причем в том порядке, в котором их выбрали. Два слова, введенные в разном порядке дают два разных результата. Так вот, в чем у меня проблема. В виджите ui события принимают два аргумента - собственно событие event и ui - объект с данными, которые нужно ввести в инпут. Самое главное, что в this при этом DOM-объект инпута, на котором аутокомплит. Короче, я не могу написать что-то типа $( "#tags" ).autocomplete({ myObj:{}, myMethod:func.... select: function( event, ui ) { this.myObj[1] = ui ; this.myMethod(ui.label); } }); Что очень неудобно. В фабрике виджитов можно переопределить только методы, которые отрисовывают меню. _renderItem _renderMenu _resizeMenu Можно ли каким-то образом таки расширить функционал autocomplete или для выполнения задачи нужно будет писать свой? Вроде все есть, немного дополнить остается.... |
Mister N,
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>autocomplete demo</title> <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css"> <script src="http://code.jquery.com/jquery-1.10.2.js"></script> <script src="http://code.jquery.com/ui/1.10.4/jquery-ui.js"></script> </head> <body> <label for="autocomplete">Select: </label> <input id="userSearch"> <script> function split(val){ return val.split( /,\s*/ ); } var data = [{"label":"orange","id":"l_25"},{"label":"apple","id":"l_38"},{"label":"banana","id":"l_44"}]; $( "#userSearch" ).autocomplete({ source: function( request, response ) { response($.map(data, function(item) { return { label: item.label, value: item.id } })) }, select: function(event, ui){ var terms = split(this.value); terms.pop(); terms.push(ui.item.value); terms.push(""); this.value = terms.join(", "); return false; }, minLength: 0, cache: false }); </script> </body> </html> |
Часовой пояс GMT +3, время: 19:19. |