JQuery UI Combobox ONCHANGE
как я могу прикрепить функцию onchange в комбоксах jqueryUI? Вот мой код:
$(".cmbBox").combobox({
change:function(){
alert($(this).val());
}
});
Когда значение изменится, оно будет предупреждать обновленное значение.
Любая помощь пожалуйста..:)
Ответы
Ответ 1
Источник примера combobox находится в этом примере. Я бы вызвал событие change
основного выбора, изменив исходный код следующим образом (изменение обработчика события select
внутри инициализации автозаполнения внутри плагина):
/* Snip */
select: function( event, ui ) {
ui.item.option.selected = true;
self._trigger( "selected", event, {
item: ui.item.option
});
select.trigger("change");
},
/* Snip */
а затем определите обработчик события для регулярного события change
select
:
$(".cmbBox").change(function() {
alert(this.value);
});
К сожалению, это не будет работать точно так же, как и обычное событие select.change
: оно вызовет даже выберем тот же элемент из выпадающего списка.
Попробуйте здесь: http://jsfiddle.net/andrewwhitaker/hAM9H/
Ответ 2
IMHO, еще более простой способ обнаружить пользователя изменил выпадающий список (без необходимости настраивать исходный код автозаполнения jQuery UI) следующим образом; это работает для меня. Это повторяется, если у вас их много, хотя, конечно, есть способ рефакторинга. Спасибо всем, кто подробно изучил и объяснил этот виджет, здесь и в другом месте.
$("#theComboBox").combobox({
select: function (event, ui) {
alert("the select event has fired!");
}
}
);
Ответ 3
В плагин ui.combobox:
i добавлен в конце метода select:
$(input).trigger("change", ui);
i добавлен перед "var input...":
select.attr('inputId', select.attr('id') + '_input');
после, чтобы иметь функциональное событие onchange... на ui.combobox я прокомментировал метод изменения и переместил его код в метод checkval, который расширяет ui.autocomplete:
$.extend( $.ui.autocomplete, {
checkVal: function (select) {
var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex($(this).val()) + "$", "i"),
valid = false;
$(select).children("option").each(function () {
if ($(this).text().match(matcher)) {
this.selected = valid = true;
return false;
}
});
if (!valid) {
// remove invalid value, as it didn't match anything
$(this).val("");
$(select).val("");
$(this).data("autocomplete").term = "";
$(this).data("autocomplete").close();
}
}
});
и я закодировали метод изменения ввода, как показано ниже:
var oCbo = ('#MyCbo').combobox();
$('#' + oCbo.attr('inputId')).change(function () {
// from select event : check if value exists
if (arguments.length < 2) {
$.ui.autocomplete.checkVal.apply(this, [oCbo]);
}
// YOUR CODE HERE
});
Ответ 4
В разделе "События" документации говорится, что вы обрабатываете изменение, как это...
$( ".selector" ).autocomplete({
change: function(event, ui) { ... }
});
Ответ 5
Кажется, это работает для меня
if('function' == typeof(callback = ui.item.option.parentElement.onchange))
callback.apply(this, []);
перед
self._trigger("selected", event, {
Ответ 6
простейший способ (IMHO), если вы устанавливаете combobox как виджет:
-
найти метод _create в виджете
-
внутри него искать "автозаполнение" (где управляется вход)
-
добавить (использовать) метод "select" для получения ваших данных: ui.item.value
(function($){
$.widget( "ui.combobox", {
// default options
options: {
//your options ....
},
_create: function() {
//some code ....
//this is input you look for
input = $( "" )
.appendTo( wrapper )
.val( value )
.addClass( "ui-state-default" )
//this is autocomplete you look for
.autocomplete({
delay: 0,
minLength: 0,
source: function( request, response ) {
//some code ...
},
//this is select method you look for ...
select: function( event, ui ) {
//this is your selected value
console.log(ui.item.value);
},
change: function( event, ui ) {
//some code ...
}
})
//rest of code
},
destroy: function() {
this.wrapper.remove();
this.element.show();
$.Widget.prototype.destroy.call( this );
}
});
Ответ 7
Фактически, уже есть "крючок" для события onchange.
Просто измените следующую строку для вызова метода или требуемого обратного вызова:
autocompletechange: "_removeIfInvalid"
Ответ 8
$("#theComboBox").combobox({
select: function (event, ui) {
alert("the select event has fired!");
}
}
);