2013-02-08 78 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

相關問題