Javascript Can';事件处理程序(jquery)中的t pass show()方法
我需要在单击按钮时显示一个块,因此我执行以下操作:Javascript Can';事件处理程序(jquery)中的t pass show()方法,javascript,jquery,Javascript,Jquery,我需要在单击按钮时显示一个块,因此我执行以下操作: var container = $('#container'); $('button').on('click', container.show); 但它不起作用,当我写这篇文章时,它起作用了: var container = $('#container'); $('button').on('click', function() { container.show() }); 有人能解释一下为什么第一个版本不起作用吗?有没有一种方法
var container = $('#container');
$('button').on('click', container.show);
但它不起作用,当我写这篇文章时,它起作用了:
var container = $('#container');
$('button').on('click', function() {
container.show()
});
有人能解释一下为什么第一个版本不起作用吗?有没有一种方法可以在不在事件处理程序中编写匿名函数的情况下使用show方法 我可能错了,但你可以做到:
var container = $('#container');
$('button').on('click', container.show.bind(container), false);
bind
方法本身应该创建一个匿名函数,这是上的第二个参数所期望的
有关Function.prototype.bind
是否尝试传递container.show()
(带括号且无参数)?@Coda17,它将立即调用show。您需要传递一个函数表达式/声明,当“click”事件发生时,它可以随后执行。因此,如果您立即使用container.show()
执行它,它将出错。@LIFUA我刚刚测试过,您完全正确。我应该删除我的评论还是把它留在那里,这样你的评论就不会看起来很傻了?不,它不起作用。不过,开发人员工具中的控制台窗口也不会记录任何错误。你知道吗,在这一点上,这整件事对我来说不是很重要,所以我认为我们应该放弃,我觉得我在浪费你的时间,而你的时间本可以用于更好的目的。谢谢你,祝你好运。不,你没有浪费我的时间。请尝试先将container.bind()分配给变量,然后在单击时将变量传递给。在这之后,您还可以尝试将null传递给bind,谁知道jQuery可能不喜欢将上下文设置为jQuery表达式?