событие изменения триггера автозаполнения jQuery
Как вы запускаете обработчик событий автозаполнения jQuery UI программно?
подключение
$("#CompanyList").autocomplete({
source: context.companies,
change: handleCompanyChanged
});
Разное Попытки До Сих Пор
$("#CompanyList").change();
$("#CompanyList").trigger("change");
$("#CompanyList").triggerHandler("change");
на основе других ответов он должны работы:
как вызвать событие изменения jQuery в код
автозаполнение jQuery и проблема изменения
Автозаполнение JQuery помогите!--18-->
событие изменения срабатывает, как ожидалось, когда я вручную взаимодействую с вводом автозаполнения через браузер; однако я хотел бы программно вызвать событие изменения в некоторых случаях.
что я упустил?
13 ответов
здесь вы идете. Немного грязновато, но работает.
$(function () {
var companyList = $("#CompanyList").autocomplete({
change: function() {
alert('changed');
}
});
companyList.autocomplete('option','change').call(companyList);
});
это тоже сработает
$("#CompanyList").autocomplete({
source : yourSource,
change : yourChangeHandler
})
// deprecated
//$("#CompanyList").data("autocomplete")._trigger("change")
// use this now
$("#CompanyList").data("ui-autocomplete")._trigger("change")
вместо этого лучше использовать событие select. Событие изменения связано с keydown, как сказал Уил. Поэтому, если вы хотите прослушать изменение при выборе, используйте select like that.
$("#yourcomponent").autocomplete({
select: function(event, ui) {
console.log(ui);
}
});
они привязываются к keydown в источнике автозаполнения, поэтому запуск keydown приведет к его обновлению.
$("#CompanyList").trigger('keydown');
они не привязываются к событию "change", потому что это срабатывает только на уровне DOM, когда поле формы теряет фокус. Автозаполнение должно реагировать быстрее, чем "потерянный фокус", поэтому оно должно привязываться к ключевому событию.
делаю так:
companyList.autocomplete('option','change').call(companyList);
вызовет ошибку, если пользователь перепечатает точную опцию, которая была там раньше.
вот относительно чистое решение для других, ищущих эту тему:
// run when eventlistener is triggered
$("#CompanyList").on( "autocompletechange", function(event,ui) {
// post value to console for validation
console.log($(this).val());
});
Per api.jqueryui.com/autocomplete/, это связывает функцию с eventlistener. Он запускается как при выборе пользователем значения из списка автозаполнения, так и при вводе значения вручную. Триггер срабатывает, когда поле теряет фокус.
вы должны вручную bind
событие, а не поставить его в качестве объекта инициализации, чтобы сделать его доступным для trigger
.
$("#CompanyList").autocomplete({
source: context.companies
}).bind( 'autocompletechange', handleCompanyChanged );
затем
$("#CompanyList").trigger("autocompletechange");
это немного обходной путь, но я за обходные пути, которые улучшают семантическое единообразие библиотеки!
программный триггер для вызова автозаполнения.событие change через поименованного триггер на источник выберите элемент.
$("#CompanyList").trigger("blur.autocomplete");
в версии 1.8 jQuery UI..
.bind( "blur.autocomplete", function( event ) {
if ( self.options.disabled ) {
return;
}
clearTimeout( self.searching );
// clicks on the menu (or a button to trigger a search) will cause a blur event
self.closing = setTimeout(function() {
self.close( event );
self._change( event );
}, 150 );
});
самый простой, самый надежный способ-использовать внутренний ._trigger (), чтобы огонь событие change автозаполнения.
$("#CompanyList").autocomplete({
source : yourSource,
change : yourChangeHandler
})
$("#CompanyList").data("ui-autocomplete")._trigger("change");
Примечание, jQuery UI 1.9 изменен .данные ("автозаполнение") к.данные ("ui-автозаполнение"). Вы также можете увидеть, как некоторые люди используют .данные ("uiAutocomplete"), который действительно работает в 1.9 и 1.10, но" ui-автозаполнение " является официальной предпочтительной формой. См.http://jqueryui.com/upgrade-guide/1.9/#changed-naming-convention-for-data-keys для пользовательского интерфейса jQuery namespaecing на ключах данных.
Я пытался сделать то же самое, но без учета переменной автозаполнения. Я прохожу через этот вызывающий обработчик изменений программно на событии select, вам нужно только беспокоиться о фактическом значении ввода.
$("#CompanyList").autocomplete({
source: context.companies,
change: handleCompanyChanged,
select: function(event,ui){
$("#CompanyList").trigger('blur');
$("#CompanyList").val(ui.item.value);
handleCompanyChanged();
}
});
Ну, это работает для меня просто привязка события нажатия клавиши к входу поиска, например:
... Instantiate your autofill here...
$("#CompanyList").bind("keypress", function(){
if (nowDoing==1) {
nowDoing = 0;
$('#form_459174').clearForm();
}
});
$('#search').autocomplete( { source: items } );
$('#search:focus').autocomplete('search', $('#search').val() );
это, кажется, единственный, который работал для меня.
этот пост довольно старый, но для тех, кто попал сюда в 2016. Ни один из приведенных здесь примеров не сработал для меня. Используя keyup
вместо autocompletechange
сделал работу. Используя jquery-ui 10.4
$("#CompanyList").on("keyup", function (event, ui) {
console.log($(this).val());
});
надеюсь, что это поможет!
другое решение, чем предыдущие:
//With trigger
$("#CompanyList").trigger("keydown");
//With the autocomplete API
$("#CompanyList").autocomplete("search");