Javascript 使用参数调用事件处理程序

Javascript 使用参数调用事件处理程序,javascript,jquery,Javascript,Jquery,我正在尝试使用参数调用事件处理程序。没有争论,它工作得很好 我哪里出了问题 var box = $("#box"); function changeColor (a) { $(this).css("background", a); } box.click(changeColor("green")); 使用 您正在调用changeColor函数,而不是将其作为回调传递。相反,你应该: box.click(changeColor.bind(this, "green")); bind方

我正在尝试使用参数调用事件处理程序。没有争论,它工作得很好

我哪里出了问题

var box = $("#box");

function changeColor (a) {
    $(this).css("background", a);
}

box.click(changeColor("green"));
使用


您正在调用changeColor函数,而不是将其作为回调传递。相反,你应该:

box.click(changeColor.bind(this, "green"));
bind方法创建了一个新函数,其中的参数已经填充,它几乎等同于执行以下操作:

box.click(function () {
    changeColor("green");   
});

您正在尝试将changeColor的返回值分配给box。单击,而不是函数本身。在函数中包装changeColor,如下所示设置框。单击该函数

box.click(function(){
   changeColor.call(this, "green")
});
请参见您需要在单击事件中调用函数的


首先计算所有参数。因此,如果您有foobar,则首先调用bar,并将其返回值传递给foo。另外,如果您需要使用call,请检查我的答案。@navigator的副本,您可能需要阅读我们的帮助中心。我们更喜欢将副本链接回它们的原始版本。@导航器使用演示检查更新的答案->是的,现在可以了!!这不起作用我先尝试了这个问题是您需要使用.call来设置函数调用的上下文。因此,您最终在回调中设置该值。我修改了代码以反映这一点。
var box = $("#box");

function changeColor (a) {
    $(this).css("background", a);
}

box.click(function(){
   changeColor("green");
});
box.click(function(){
   changeColor.call(this, "green")
});
var box = $("#box");

function changeColor (a) {
    $(this).css("background", a);
}

box.click(function(){
   changeColor.call(this, "green");
});