2013-10-08 61 views
0

我創建了一個簡單的應用程序使用JS/jQuery作爲學習練習,並遇到了我以前遇到的問題,似乎無法解決。爲什麼在下面的代碼中是自動觸發的第二個點擊事件,而不是當我點擊$('。tweet li a.username')?爲什麼這個點擊事件會在jQuery中自動觸發?

$(function(){ 
    setInterval(update, 3000); 
    $('.showMore').on('click', function() { 
     moreIndex += 5; 
     update(); 
    }) 
    $('.tweet li a.username').on('click', alert('hey!')); 
    }); 

alert('hey!')是我仍然在工作的函數的填充。這應如何組織,以便點擊鏈接時單擊事件觸發而不是頁面加載時觸發?即使我更改了訂單,$('。showMore')事件也能正常工作。

回答

3

這是因爲您在那裏調用alert函數而不是傳遞迴調函數引用。

在您的情況下,您正在調用alert()函數並將alert返回的值作爲單擊事件處理函數傳遞。

$('.tweet li a.username').on('click', function(){ 
    alert('hey!') 
}); 
+0

明白了。試過之前並沒有得到警報。我必須讓選擇器錯誤。 – Ja5onHoffman

1

你需要用警報的回調函數,就像第一個例子:

$('.tweet li a.username').on('click', function() { alert('hey!') }); 

.on方法,在該位置期待一個JavaScript對象,尤其是功能,它可以在以後執行。原始代碼中發生的事情是,JavaScript引擎正在尋找一個函數,但是會看到其他代碼 - 因此它會在那裏執行代碼(激活警報),希望返回一個有用的對象。 (當沒有任何東西被返回時,JavaScript引擎代之以假設你想要在點擊事件中執行null,並且很樂意這樣做。)

相關問題