2010-07-02 84 views
5
$(document).ready(SetupButtonClicks()); 

function SetupButtonClicks() { 
    $('#btnJavaPHP').click(DoPHPStuff()); 
} 

function DoPHPStuff() { 
    //stuff 
} 

我在我的JavaScript文件中有這段代碼,當我調試它時,我發現它調用SetupButtonClicks()像它應該,但之後完成它調用DoPHPStuff()。只有當點擊btnJavaPHP時才應調用DoPHPStuff()。我究竟做錯了什麼?爲什麼這個javascript函數在未被調用的情況下運行?

回答

17

更改您的SetupButtonClicks功能:

$('#btnJavaPHP').click(DoHPStuff); 

你知道了編碼,你告訴Javascript功能來通話的功能,而不是使用它作爲「點擊」處理的方式。括號是導致函數被調用的運算符

+0

謝謝,它修復了它。 – jamone 2010-07-02 15:00:53

+2

@jamone你是$(document).ready可能仍然是錯誤的...確保也改變這一點。 – galambalazs 2010-07-02 15:04:00

+0

@galambalazs是的,我同時修復了$(document).ready行。謝謝 – jamone 2010-07-02 15:07:05

3

刪除()

通過寫$(document).ready(SetupButtonClicks()),你是調用SetupButtonClicks和返回值傳遞給ready
同樣,通過編寫$('#btnJavaPHP').click(DoPHPStuff()),你是呼叫DoPHPStuff(立即),並通過它返回到click()

您需要通過編寫$(document).ready(SetupButtonClicks)$('#btnJavaPHP').click(DoPHPStuff)來傳遞函數本身。

3
function DoPHPStuff() { 
    //stuff 
} 

function SetupButtonClicks() { 
    $('#btnJavaPHP').click(DoPHPStuff); 
} 

$(document).ready(SetupButtonClicks);  
2

除函數聲明外,函數標識符後面的一對括號會導致函數執行。示例:

// function declaration; function not executed 
function SetupButtonClicks() { 

} 

// function executed 
SetupButtonClicks(); 

// function not executed 
SetupButtonClicks; 
相關問題