2010-12-23 69 views
1

我在一個頁面中增加了一個JavaScript函數JavaScript錯誤:函數XXXX()沒有定義

<head> 
    <script type=text/javascript> 
     function show_Alert(error) 
     { 
      alert(error); 
     } 
    </script> 
</head> 

和按鈕點擊我這樣做

Protected void btn_Click(object o,Eventargs e) 
{ 
    StringBuilder str = new StringBuilder(); 
    str.AppendLine("show_Alert('XYZ error')"); 
    ClientScript.RegisterStartupScript(GetType(),"Alert",str.ToString(),true); 
} 

但它拋出JS錯誤show_Alert不定義:(

什麼想法,有什麼錯在這裏?

感謝名單

+0

對不起,這是不是一個問題,我正在編輯問題 – BreakHead 2010-12-23 14:07:47

回答

4

您的腳本標記錯誤。
將其更改爲

<script type="text/javascript"> 

不過,我不認爲這是個問題。
我懷疑RegisterStartupScript正在發出它的<script>塊之前與你的函數,以便它最終調用函數之前,它存在。
檢查每個<script>在渲染源中的位置。

+0

SLak RegisterStartupScript創建新的

2

確保您<script>元素是有效的,就像這樣:

<head> 
    <script type="text/javascript"> 
    function show_Alert(error) 
    { 
     alert(error); 
    } 
    </script> 
</head> 

如果它不能很好地形成,或者type是無法識別的(你的情況有兩種),那麼裏面的腳本將被忽略,因爲瀏覽器不知道如何處理它。

0

下面是一個例子:

<%@ Page Language="C#" %> 
<script type="text/C#" runat="server"> 
    protected void BtnClick(object sender, EventArgs e) 
    { 
     var str = "XYZ Error"; 
     var script = new StringBuilder(); 
     script.AppendFormat("showAlert('{0}');", 
      HttpUtility.JavaScriptStringEncode(str) 
     ); 
     ClientScript.RegisterStartupScript(GetType(), "alert", script.ToString(), true); 
    } 
</script> 
<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
    <script type="text/javascript"> 
     function showAlert(error) { 
      alert(error); 
     }  
    </script> 
</head> 
<body> 
    <form id="Form1" runat="server"> 
     <asp:LinkButton ID="Btn" runat="server" Text="Click me" OnClick="BtnClick" /> 
    </form> 
</body> 
</html> 

要注意的是要正確編碼要傳遞到showAlert函數字符串是一個非常重要的事情。請注意,這是encoded

script.AppendFormat("showAlert('{0}');", 
    HttpUtility.JavaScriptStringEncode(str) 
); 

如果不對其進行編碼,並且該字符串包含一些特殊的字符,如'例如,你的腳本將打破。