插件函数内的 jQuery $(this)
我有这个 jQuery 插件:
$.fn.touchBind = function(func) {
$(this).live('touchmove', function() {
$(this).addClass('dragged');
});
$(this).live('touchend', function() {
if ($(this).hasClass('dragged') == false) {
func();
}
});
return this;
}
并像这样调用它:
$('.the-element').touchBind(function() {
$(this).hide();
});
我的问题是 $(this).hide()
中的 $(this)
不引用 $('.the-element')
,而是 DOMWindow
。有什么办法可以让我完成这项工作吗?
I have this jQuery plugin:
$.fn.touchBind = function(func) {
$(this).live('touchmove', function() {
$(this).addClass('dragged');
});
$(this).live('touchend', function() {
if ($(this).hasClass('dragged') == false) {
func();
}
});
return this;
}
and call it like so:
$('.the-element').touchBind(function() {
$(this).hide();
});
My problem is that $(this)
in $(this).hide()
doesn't refer to $('.the-element')
, but rather DOMWindow
. Is there a way I can make this work?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
将
func();
更改为func.call(this);
或$.proxy(func, this)();
。您还可以使用
apply()
(当call()
适合时不需要)或bind()
(有限的浏览器支持,$ .proxy()
本质上做同样的事情)。Change
func();
tofunc.call(this);
or$.proxy(func, this)();
.You could also use
apply()
(not necessary whencall()
suits) orbind()
(limited browser support,$.proxy()
does essentially the same thing).怎么样:
How about:
@Alex 是正确的,您只需将
func();
替换为func.call(this);
就可以了。不过我想指出的是,您在插件中对 jQuery 构造函数进行了 2 次冗余调用:您可以像这样验证它:
然后:
@Alex is correct, all you need is to replace
func();
withfunc.call(this);
and it will work. However I'd like to point out that you are making 2 redundant calls to jQuery constructor in your plugin:You could verify it like this:
And then: