我试图沿着这些方向做点什么:
setTimeout($('#element').hide,3000);
这似乎很简单,但它被"this" problem瘫痪了。我想找到一种方法来将实际函数作为参数传递,而不将其包装在另一个函数中,例如我不想这样做:
setTimeout(function(){$('#element').hide();},3000);
我尝试了什么:
setTimeout($('#element').hide,3000);
setTimeout($('#element').hide.apply(document),3000); /* jQuery docs say that document is the default context */
setTimeout($('#element',document).hide,3000);
setTimeout($(document).find('#element').hide,3000);
setTimeout($(window).find('#element').hide,3000);
setTimeout($.proxy($('#element').hide,document),3000); /* I know this returns a function, which I don't want, but I have tried it */
setTimeout(($('#element').hide()),3000); /* functional expression */
我正在寻找解决此问题的方法,但我不想将其包装在另一个函数中。代码行越少越好。我知道为什么这不能按预期工作,但我怎么能修复它而不将它包装在一个闭包中?
答案 0 :(得分:5)
您可以通过将方法的上下文与元素本身绑定来执行此方法,以便在jquery中隐藏方法this
将指向jquery对象而不是全局上下文。您可以使用以下命令创建绑定函数:
跨浏览器替代方案:
例如:
var $elem = $('#element');
setTimeout($elem.hide.bind($elem),3000);
或
setTimeout($.proxy($elem.hide, $elem),3000);
或
setTimeout($.fn.hide.bind($elem),3000); //setTimeout($.proxy($.fn.hide, $elem),3000);
<强> Fiddle 强>