справка по триггеру и как наследовать глобальные объекты (виджет jQuery Ui) - PullRequest
0 голосов
/ 31 августа 2011

Привет, пользователи Stackoverflow,

У меня вопрос по поводу виджета JQ UI, который я пытаюсь создать.У меня есть команда _create со следующим:

    this.findinput =    this.element.children('input:text')
                            .addClass('ui-search-input ui-widget ui-state-default ui-background-none ui-corner-left')
                            .wrap('<div class="ui-position-wrapper" />')
                            .bind('focusin focusout',this._checkval)
                            .bind('keyup',this.inputchanged);

Как вы можете видеть, я связываю некоторую функцию с полем ввода, чтобы я мог манипулировать текстом и макетом.Но моя проблема в том, что функция по какой-то причине перезаписывает глобальный объект this и его переменные.Как я могу держать их внутри функций?(Причина, по которой я использую функции, заключается в том, что я могу получить к ним доступ снаружи виджета)

inputchanged: function(e) {
    $target = $(e.target);
    if (($target.val()).length != 0) {
        this.element.children('.ui-search-reset').children().addClass('ui-icon').removeClass('ui-helper-hidden');
    } else {
        this.element.children('.ui-search-reset').children().addClass('ui-helper-hidden').removeClass('ui-icon');
    }
},

возвращает: this.element не определен и я не могу получить доступ this.options либо?

Также, если я связываю функцию с «tr» в таблице и нажимаю «td», он устанавливает «td» в качестве целевого объекта вместо «tr», который гдетот, кто связан - почему это?:)

Я новичок в jQuery, так что это могут быть глупые вопросы, или я могу ошибаться - пожалуйста, дайте мне знать, если это так!

1 Ответ

1 голос
/ 31 августа 2011

Простой способ убедиться, что вы получите право this, сделать это явно:

var self = this;
this.findinput = this.element.children('input:text')
                     //...
                     .bind('focusin focusout', function(e) { self._checkval(e) })
                     .bind('keyup', function(e) { self.inputchanged(e) });
...