2013-02-08 77 views
4

该函数在页面加载时被调用,而不是在单击.somebutton时调用。我不知道为什么。我希望能够传递变量,以便我可以在具有不同值的多个位置使用此函数。非常感谢你。在页面加载时调用的函数不是jquery .click

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

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

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

小提琴或不存在 – mikakun 2013-02-08 17:17:51

回答

7

你路过dosomething(i,u)回到click句柄值。这就是为什么它没有点击就执行,只要你调用你的函数就会发生(即:dosomething(i,u))。你需要用你的函数调用匿名函数内部:

$(".somebutton").click(function() { dosomething(i,u); }); 
+0

@YanickRochon它会工作,检查[jsfiddle](http://jsfiddle.net/JGGc9/) – Zbigniew 2013-02-08 17:22:53

+0

是的,我没有看到外部声明变量 – 2013-02-08 17:25:04

+0

真棒,谢谢你们! – seal6105 2013-02-08 17:30:27

1

您可以参考使用方法在您的示例只传递一个函数(即不带参数)。你的函数加载的原因是由于尾部的()括号会立即调用它。

如果你需要传递,你需要将它包装在一个匿名函数的参数,就像这样:

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

// on page load: 
dosomething(i, u); 
1

在JavaScript中做

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

不会在功能分配给您的点击事件,而是调用函数并分配函数返回的结果。你需要引用您的函数:

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

如果你需要将变量传递给你的函数,那么你需要包装内的另一个匿名一个上述功能:

$(".somebutton").click(function() { dosomething(i, u); }); 
+0

谢谢这是我第一次真正理解为什么这种行为是有道理的。 – 2016-02-02 16:27:20

相关问题