gpt4 book ai didi

javascript - 在不关闭的情况下在 setTimeout 中执行 jQuery 成员函数的方法?

转载 作者:搜寻专家 更新时间:2023-11-01 04:09:24 26 4
gpt4 key购买 nike

我试图按照这些思路做一些事情:

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 */

我正在寻找解决此问题的方法,但我不想将其包装在另一个函数中。代码行越少越好。我知道为什么这没有按预期工作,但我如何在不将其包装在闭包中的情况下修复它?

最佳答案

您可以通过将方法的上下文与元素本身绑定(bind)来实现这一点,这样在 jquery 中隐藏方法 this 将指向 jquery 对象而不是全局上下文。您可以使用以下方法创建绑定(bind)函数:

Function.bind

为此的跨浏览器替代方案:

$.proxy

例如:

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

关于javascript - 在不关闭的情况下在 setTimeout 中执行 jQuery 成员函数的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20221163/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com