Событие изменения пользовательского интерфейса jQuery - PullRequest
1 голос
/ 23 марта 2012

Я пытаюсь сохранить виджет, который запускает события, используя одну из этих двух строк кода:

this.element.trigger('change');  // or...
stop: function (event, ui) { that.element.change(); }

Слово «изменение» встречается только 4 раза в коде, в одном из 2формы выше.Тем не менее, я понятия не имею, что здесь происходит.В вызове изменения нет обработчика событий, и нет вызовов связывания, делегирования, включения или живых вызовов, поэтому, вероятно, это настраивается внешним образом.Кто-нибудь может заполнить меня?Есть ли какие-либо документы на это?Спасибо.

Ответы [ 2 ]

2 голосов
/ 23 марта 2012

Эти две строки кода просто инициируют событие изменения на this.element, используя два разных допустимых синтаксиса.

Используя .trigger () :

this.element.trigger('change');

Или используя сокращенный метод .change () :

that.element.change();

Вы можете фактически привязать обработчик события к элементу, представленному this.element, для обработки этого события.


Не зная вашего плагина, трудно точно ответить вам, что такое this.element.

Но возьмем пример плагина автозаполнения.В этом случае this.element фактически является полем ввода, к которому применяется плагин автозаполнения.Если событие изменения было инициировано так, как это было сделано в вашем вопросе, вы можете привязать обработчик события к входу следующим образом:

$('#myinput')
    .autocomplete()
    .bind('change', function() { });

Теперь, если этот плагин использует виджет jQuery UIFactory , рекомендуется использовать метод _trigger() для запуска событий вместо jquery .trigger ().

Использование _trigger () обязательно выполнит любой обратный вызов, определенный в параметре плагина с помощьюправильный контекст, а также вызвать это событие для this.element (как выше).Таким образом, вы могли бы иметь:

$('#myinput')
    .somePlugin({
        change: function(e, someData) {
            // "this" here will be `this.element´
        }
    })
    .bind('change', function() { ... });
0 голосов
/ 23 марта 2012

Ответ оказался простым - не было обработчика событий, не было вызовов bind / etc, jQuery ничего не делает за кадром, поэтому вызовы триггера ничего не делали. Я закомментировал их, и виджет вел себя точно так же. Doh.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...