我有一个通用(自定义)jQuery插件。 $ .fn.something()。这会在我的DOM中的某些对象上调用。让我们说
$('div.section').something()
在函数内部,我有类似的东西......
$.fn.something = function(options) {
//here **this** refers to $('div.section') which is what I want
$(window).bind('scroll', function(){
//how do I get the 'this' from above into here.
});
});
我不能为我的生活从插件内部的.bind()函数中获取“this”的引用。我有一个解决方法,我将“this”存储到options数组中并以这种方式传递,但我不禁想到有一种更简单的方法来执行此操作。
答案 0 :(得分:0)
使用变量。
$.fn.something = function(options) {
var self = this;
$(window).bind('scroll', function(){
//use self.options
});
});
这是我从knockoutjs中学到的一个技巧
答案 1 :(得分:0)
您在变量中设置this
的值,然后使用它...
$.fn.something = function(options) {
var that = this;
$(window).bind('scroll', function(){
// use that!
});
});
这可能看起来像是一个黑客,但它是非常共同的地方。
如果您能够使用ES5中介绍的方法,而不必担心backwards compatibility,您还可以使用Function.prototype.bind()
函数;
$(window).bind('scroll', (function(){
// use this
}.bind(this)));
答案 2 :(得分:0)
$.fn.something = function(options) {
var self=this;
$(window).bind('scroll', function(){
//you can now use self
});
});
答案 3 :(得分:0)
使用$ .proxy:
$。fn.something = function(options){
$(window).bind('scroll', $.proxy(function(){
//you can now use this
}, this));
});