2014-04-01 88 views
1

我有一個功能,打開對話窗口。當用戶點擊註冊按鈕時,註冊對話框應該打開。但是,只要頁面加載,對話框就會打開。如果我使用匿名函數來處理事件,它可以正常工作,但是我想爲其他對話框(登錄等)重用openDialog函數,所以我不希望它是匿名的。點擊事件觸發器之前點擊

var ready; 
ready = function() { 
    $('.js-join-button').on('click', openDialog(event, signUp)); 

    function openDialog(event, dialogType) { 
     event.preventDefault ? event.preventDefault() : event.returnValue = false; 
     dialogType.dialog('open'); 
    } 
... 
} 
$(document).ready(ready); 
+1

可能的重複[爲什麼點擊事件處理程序在頁面加載時立即觸發?](http://stackoverflow.com/questions/7102413/why-does-click-event-handler-fire-immediately-upon-page-負載) –

回答

5

你需要將你的函數包裝在一個匿名函數中。您的代碼將貫穿始終,否則只需觸發該功能。現在

$('.js-join-button').on('click', function() { 
    openDialog(event, signUp) 
}); 

,例如,如果你的函數不帶任何參數,你可以做

$('.js-join-button').on('click', openDialog); 

這傳遞一個參考的功能。隨着()它觸發該功能。沒有,這是一個函數參考。

+0

我的第二個例子不是一個匿名函數。正如我所說,這是一個函數參考。 –

+0

謝謝。 :)儘管如此,「觸發器」在JavaScript中有着非常明確的含義,您可以將它用於兩種不同的概念,這兩種概念都不對應於單詞的標準含義(與事件相關,如'$('#foo' ).trigger('click')' - 如OP在標題中所示)。第一種會比「供應」或「提供」更好;第二個「調用函數」。 – Amadan

+0

那麼,在那個例子中'trigger'是一個jQuery方法。 JS沒有觸發器的「設置定義」。它可以以特定方式解釋,但也可以用作調用或提供的同義詞。 –