2011-06-29 52 views
0

我希望我不只是犯了一個愚蠢的錯誤,但出於某種原因,下面的代碼不起作用。出現這種情況的唯一事情是它記錄在控制檯 「準備」,但。點擊jquery .click不起作用

的Javascript沒有什麼:

var Photobooth = (function(){ 
var api = {}; 

var init = function(){ 
    form_ready(); 

}; 


var form_ready = function(){ 
    console.log("ready"); 
    $('#btn-signin').click(function(e){ 


     e.preventDefault(); 
     console.log('click'); 

     $.ajax({ 
       type: 'POST', 
       url: "entertainment/photobooth/signin/action/", 
       data:$(this).serialize(), 
       success: function(){ 
       $(this).addClass("done"); 
       } 
      }); 

    }); 
}; 



init(); 
return api; 
})(); 

HTML:

<a id="btn-signin" href="##">SIGN IN </a> 

解決方案:通常情況下,我把我的JS代碼放在文檔的末尾,在結束的主體之前......在這種情況下,我必須把它放在一開始,忘記放置document.ready,所以它現在可以工作。由於

+1

剛剛在Chrome中嘗試過,它似乎工作正常(我得到「點擊」登錄控制檯):http://jsfiddle.net/SzwRe/ –

+0

你有很多不必要的代碼,最好是創建一個減少你的問題。你的api變量被返回,但它是一個空對象。 –

+0

它適合我。文檔準備好之前,您的JavaScript正在運行嗎? – smoak

回答

4

您需要的document.ready包裝:

var Photobooth = $(function(){... 
    .... 
    init(); 
    return api; 
}); 
+0

哇....我不知道爲什麼錯過了...我從來沒有把一個document.ready包裝,它一直工作。也許是因爲它實際上在頁面頂部......現在有意義了。謝謝! – Bill

0

它確實對我有用。嘗試演示here

我假設你的jQuery沒有被加載,然後再使用它。

始終使用jQuery內

$(document).ready(function(){ 

}); 
0

我敢肯定,你在呼喚你的代碼中創建<a>之前。使用jQuery的ready或將您的代碼移動到頁面底部。