焦点上的jQuery绑定函数

时间:2009-10-04 19:48:53

标签: javascript jquery

我正在为jQuery编写一个小插件,到目前为止我已经得到了这个:

(function($){

    $.fn.extend({

        someFunction: function() {
            return this.each(function() {
                var obj = $(this);
                obj.focus(someInternalFunction(obj));
            });
        }

    });

    function someInternalFunction(obj) {
    };

})(jQuery);

问题是,当我将someFunction附加到对象时,对象获得焦点并且焦点事件上someInternalFunction的绑定失败。

然后我尝试绑定函数以在另一个函数中包装函数调用:

obj.focus(function() {
    someInternalFunction($(this));
});

这段代码有效,但根本不是很好。是否可以在焦点上绑定函数而不将其包装在另一个函数中?

2 个答案:

答案 0 :(得分:1)

$.fn.bindFocus() = function(){
    var internalFunction = function(){
        var $this = $(this),
            self = this;
        // try do stuff here
    };
    return this.each(function(){
        $(this).bind('focus', internalFunction);
    });
}

$('#myElement').bindFocus();

希望它会有所帮助?

EDT。对不起,第一次搞错了:))

答案 1 :(得分:1)

下面:

obj.focus(someInternalFunction(obj));
                              ^^^^^ 

...你正在调用这个函数,这意味着它的返回值实际上最终被传递给 focus() 。相反,您希望将函数传递给 focus() 。鉴于您希望将 obj 传递给 someInternalFunction ,您必须定义一个额外的功能来包装它:

obj.focus(function(){
    someInternalFunction(obj);
});

只是为了说清楚:

var x = function() { return 3; }; // Defining a function

x; // -> this is a function reference
x(); // -> this is 3