2010-07-25 40 views
3

我正在创建一个插件,它无法访问$(this)。我的插件的一个简单概述是

(function($){ 
    $.fn.myPlugin= function(options, callback) { 
     return this.each(function(){ 
       $(this).click(function(){ 
         // some plugin works .. 

         callback(); 
       }); 
     }); 
    }; 

})(jQuery); 

然后接上我的插件的元素像

$('p').myPlugin({ 
     // Some options 
}, function(){ 
     alert('first test'); 
     alert($(this).text()); 
}); 

这里被点击的元素p时,我得到的第一个警报,但我没有得到第二次警报。

调用回调函数,但无法访问this。 定义或代码有问题吗?任何其他建议也将有助于

回答

4

相反的callback();,使用.apply()给它正确的上下文中(否则就window),像这样:

callback.apply(this); 

You can see the updated/working version here


为了更全面了解这里,如果你愿意,你可以传递更多的参数给callback,例如,如果你想使options可用,你可以这样做:

(function($){ 
    $.fn.myPlugin= function(options, callback) { 
    return this.each(function(){ 
     $(this).click(function(){ 
     callback.apply(this, [options]); 
    }); 
    }); 
}; 
})(jQuery); 

然后这样称呼它:

$('p').myPlugin({ 
    thing: "thing1" 
}, function(opts){ 
    alert(opts.thing); //thing1 
});​ 

You can give that one a try here,只是你想要的任何参数添加到该数组,callback()会被称为那些论点:)

0

您可以发布一个使用自动填充小部件的完整示例吗?

这是我想做的事......

$('.suggest').autocomplete({ 
    source: function(request, response) { 
     typ = $(this).getAttr("class").split(" ")[2] 
     .... 

...但这个返回undefined。现在我正在使用document.activeElement,但我更喜欢Nick Craver的方法。

相关问题