【问题标题】:trigger help, and how to inherit global objects (jQuery Ui widget)触发帮助,以及如何继承全局对象(jQuery Ui 小部件)
【发布时间】:2025-12-08 06:25:01
【问题描述】:

您好 * 用户,

我有一个关于我尝试制作的 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 很陌生,所以这可能是一些愚蠢的问题,或者我可能做错了 - 如果是这种情况,请告诉我!

【问题讨论】:

标签: jquery jquery-ui bind


【解决方案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) });

【讨论】:

  • 去试试,谢谢!做 var self = this 的原因;是这样的,所以它不会在函数中覆盖它吗?
  • @Marco: this 是一个关键字,它的值取决于上下文,匿名函数内部的this 不是外部的this,所以我们在变量中获取正确的this .