我正在为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));
});
这段代码有效,但根本不是很好。是否可以在焦点上绑定函数而不将其包装在另一个函数中?
答案 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