2013-04-27 82 views
0

我想通過Ajax提交表單,但它沒有調用函數?螢火蟲控制檯,給出錯誤「功能未定義」

,我發現了Firebug的控制檯上的錯誤:

ReferenceError: CreateUser is not defined 
CreateUser() 

我使用調用這個函數的按鈕:

<input type="button" onclick="CreateUser()" id="RegisterUserBtn" class="btn" value="Sign Up" name=""> 

我的功能:

<script language="JavaScript"> 
    $(document).ready(function(e){ 

     function CreateUser(){ 
      alert('CreateUser SignUp button is clicked.'); 
     } 
    }); 

</script> 

什麼是造成這個問題?爲什麼不能找到函數名?

+3

在'document.ready'之外聲明'function'會解決它。 – 2013-04-27 07:42:33

+0

@DipeshParmar 是的,你說得對,需要它在document.ready 之外聲明thankyou。 – 2013-04-27 08:29:11

回答

2

您正在通過將它放在匿名函數中來圍繞CreateUser函數創建閉包。 CreateUser對於包含函數的範圍是「本地」,並且不會暴露給定義onclick事件的全局範圍。

只需使用$(document).ready塊之外的功能。

+0

我的錯誤,我不需要在'$(document).ready'下定義它。 現在工作。謝謝.. – 2013-04-27 08:27:50

4

您在這裏混合了兩種JavaScript編碼風格:在您的html代碼中帶有事件屬性的「舊風格」。和$(document).ready塊中的「unobstrusive javascript」。 我的建議是一直使用unobstrusive JavaScript:

不要在您的html中使用onclick。 jQuery可以幫助您將所有的JavaScript保留在您的html代碼之外。你已經有了一個ID給你。

<input type="button" id="RegisterUserBtn" class="btn" value="Sign Up" name=""> 

讓你的jQuery看起來是這樣的:

$(document).ready(function(e) { 
    function CreateUser() { 
     alert('CreateUser SignUp button is clicked.'); 
    } 
    $('#RegisterUserBtn').on('click', CreateUser); 
}); 

HTML和Javascript的這種分離被稱爲 「unobstrusive的JavaScript」。

見現場演示在這裏:http://jsfiddle.net/bjelline/nySxm/

1

如果您正在使用jQuery那就試試這個,而不是

<script language="JavaScript"> 
    $(document).ready(function(e){ 

     $("#RegisterUserBtn").click(function(){ 
      alert('CreateUser SignUp button is clicked.'); 
     }); 
    }); 
</script> 

希望這有助於

1

如果你想在點擊事件上運行CreateUser函數,那麼,刪除$(document).ready函數並在標題中聲明你的函數。內容加載後加載$(document).ready中的功能。你的html在函數聲明之前加載。

或者您可以使用jquery on函數。

$(document).ready(function(e) { 

    $('#RegisterUserBtn').on('click', function() { 
     alert('CreateUser SignUp button is clicked.'); 
    }); 

});