JQuery UI:绑定处理程序到方法:无法获取元素?

时间:2011-06-22 10:45:00

标签: jquery jquery-ui widget bind

我正在创建一个小的JQuery UI小部件,我将处理程序绑定到一个元素:

this.element.bind("keyup", { list: this.container }, this._filter);

小部件有选项:

options:
{
    dataUrl: '',
    isEnabled: true
},
_filter: function (event)
{
    var input = $(this);
    var that = this;
    alert(that.options.isEnabled);
    if (that.options.enabled) {
        that.container.show();
        event.data.list.find("li").each(function () {
            if ($(this).text().toLowerCase().indexOf(input.val().toLowerCase()) < 0) {
                $(this).hide();
            }
            else {
                $(this).show();
            }
         });
     }
 },

但是当我在_filter中对一个选项发出警报时,我收到一个错误:“that.options is undefined” 对于我尝试访问/使用的任何其他元素也是如此,就好像该函数只能获取内部定义的内容或者传递的eventData中的内容。

我错过了什么吗? 感谢

1 个答案:

答案 0 :(得分:1)

问题是侦听器函数(_filter)的范围/上下文/它也是它绑定的jQuery对象。在你的情况下,_filter函数中的这个实际上会在被称为事件监听器时引用小部件的this.element。你能做的是以下几点:

this.element.bind("keyup", { list: this.container }, $.proxy(this, "_filter"));

代理方法的作用基本上是包装将在特定上下文中应用的函数(see documentation)。关于代理的好处是,您可以使用原始函数解除绑定:

this.element.unbind("keyup", this._filter);

希望这有帮助。