4

此函数在页面加载时调用,而不是在单击 .somebutton 时调用。我不确定为什么。我希望能够传递变量,以便可以在多个具有不同值的地方使用此函数。非常感谢。

var i = "this be i";
var u = "this be u";

function dosomething (var1, var2){
    console.log(var1 + " and " + var2);
}

$(".somebutton").click(dosomething(i,u));
4

3 回答 3

6

您正在将返回的值传递dosomething(i,u)click处理程序。这就是为什么它在不点击的情况下执行的原因,它会在你调用你的函数时发生(即:)dosomething(i,u)。您需要将函数调用包装在匿名函数中:

$(".somebutton").click(function() { dosomething(i,u); } );
于 2013-02-08T17:17:51.820 回答
1

您只能使用示例中的方法(即不带参数)通过引用传递函数。您的函数在加载时工作的原因是因为它会由于尾()括号而立即被调用。

如果需要传递参数,则需要将其包装在匿名函数中,如下所示:

// on click:
$(".somebutton").click(function() {
    dosomething(i, u);
});

// on page load:
dosomething(i, u);
于 2013-02-08T17:18:23.580 回答
1

在 JavaScript 中做

$(".somebutton").click(dosomething(i,u));

不会将该函数分配给您的点击事件,而是会调用该函数并分配该函数返回的任何结果。您需要引用您的函数:

$(".somebutton").click(dosomething);

如果您需要将变量传递给您的函数,那么您需要将所述函数包装在另一个匿名函数中:

$(".somebutton").click(function() { dosomething(i, u); });
于 2013-02-08T17:21:39.550 回答