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很新,所以这可能是愚蠢的问题,或者我可能做错了 - 如果是这样的话,请告诉我!
答案 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) });