Подтвердить что ты не робот

JQuery UI Combobox ONCHANGE

как я могу прикрепить функцию onchange в комбоксах jqueryUI? Вот мой код:

$(".cmbBox").combobox({
     change:function(){
         alert($(this).val());
     }
});

Когда значение изменится, оно будет предупреждать обновленное значение.

Любая помощь пожалуйста..:)

4b9b3361

Ответ 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!"); 
    } 
}

);