Как прикрепить пользовательскую функцию обратного вызова к расширению автозаполнения jquery?

Я использую расширение jquery autocomplete 1.0.2 от Dylan Verheul, Dan G. Switzer, Anjesh Tuladhar, Jörn Zaefferer. Я пытаюсь выполнить свою собственную функцию обратного вызова, когда .show() и .hide() вызываются из элемента управления автозаполнением. Я не нашел способа распознать мою функцию обратного вызова. Если кто-то знаком с этим управлением и может помочь, я был бы очень признателен.


person Aaron Palmer    schedule 04.03.2009    source источник


Ответы (1)


Извините, у меня нет простого ответа на ваш вопрос, я проверил исходный код плагина и не нашел никакого механизма, позволяющего вам делать то, что вы хотите. Я думаю, вам придется обновить этот плагин самостоятельно, чтобы он работал так, как вы хотите.

Идея состоит в том, чтобы добавить свои обратные вызовы к параметру options, а затем заставить плагин использовать эти обратные вызовы. Во-первых, вам придется изменить код плагина. Перейдите к функции, которая создает класс, отвечающий за отображение/скрытие элемента управления автозаполнением:

$.Autocompleter.Select = function (options, input, select, config) {

Если вы прокрутите вниз, вы увидите, что эта функция возвращает объект с методами show() и hide(). Вы можете добавить следующий код:

hide: function() {
    ...
    options.showCallback && options.showCallback(); // Invoke callback function if set
},
...
show: function() {
    ...
    options.hideCallback && options.hideCallback(); // Invoke callback function if set
},

Наконец, когда вы создаете свое автозаполнение, вы должны добавить свои обратные вызовы к своим параметрам:

$("#myTextBox").autocomplete("http://...",
{
    showCallback : function() { /* do what you want here */ },
    hideCallback : function() { /* do what you want here */ }
});

Вообще не тестировалось, это просто быстрое и грязное решение. Надеюсь, это поможет.

person ybo    schedule 04.03.2009
comment
оно работает! ты восхитителен! На самом деле у меня есть функции обратного вызова show и hide, которые я хочу вызывать заранее, поэтому я просто делаю showCallback:myShow, hideCallback:myHide, и это просто работает, еще раз спасибо! - person Aaron Palmer; 04.03.2009
comment
Отлично ;) Вы можете попробовать отправить идею/код авторам, возможно, они заинтересуются. - person ybo; 04.03.2009
comment
Отличная работа. Нечто подобное доступно в новой версии jquery-autocomplete: code.google.com/p/ jquery-автозаполнение - person dyve; 19.02.2010