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, время: 06:49. |