触发器帮助,以及如何继承全局对象(jQuery Ui小部件)

时间:2011-08-31 07:12:50

标签: jquery jquery-ui bind

Hello 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);

正如您所看到的,我将一些函数绑定到输入字段,因此我可以操作文本和布局。 但我的问题是该函数由于某种原因覆盖了globa对象'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 个答案:

答案 0 :(得分:1)

确保获得正确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) });