2012-04-03 45 views
0

我有一個包含在UpdatePanel內部的asp.net按鈕,點擊後它執行異步回發並註冊一些顯示jQuery對話框的JavaScript。在異步回發上註冊javascript

protected void btnAddData(object sender, EventArgs e) { 
    StringBuilder jqueryDialog = new StringBuilder(); 
    jqueryDialog.Append("$(document).ready(function() {"); 
    jqueryDialog.Append("RefreshData();"); 
    jqueryDialog.Append("$('#divData').dialog({ modal: false, draggable: true, title: 'Historical Data', width: 700 });"); 
    jqueryDialog.Append("});"); 

    ScriptManager sm = ScriptManager.GetCurrent(this); 
    if (sm != null && sm.IsInAsyncPostBack) { 
     ScriptManager.RegisterClientScriptBlock(
      this, typeof(Page), Guid.NewGuid().ToString(), 
      jqueryDialog.ToString(), true); 
    } 
} 

正如你所看到的JavaScript首先調用一個名爲RefreshData()的函數,該函數存在於我的標記爲javascript。

<script type="text/javascript" language="javascript"> 
    if ($) { 
     $(document).ready(function() { 
      function RefreshData() { 
       alert("Data Refreshed!"); 
      } 
     }); 
    } 
</script> 

不過,Firefox是給那個說RefreshData沒有定義錯誤。這是否意味着我在異步回傳中註冊的任何javascript將無法使用我在標記中定義的 javascript函數?

感謝您的幫助。

回答

2

不要在document.ready函數中定義RefreshData函數,它是一個匿名回調函數。它定義之外,以便它是對外部訪問:

<script type="text/javascript"> 
    if (typeof($) != 'undefined') { 
     function RefreshData() { 
      alert("Data Refreshed!"); 
     } 
    } 
</script> 

而且你可能不需要在的document.ready來包裝你的服務器端包括:

StringBuilder jqueryDialog = new StringBuilder(); 
jqueryDialog.Append("RefreshData();"); 
jqueryDialog.Append("$('#divData').dialog({ modal: false, draggable: true, title: 'Historical Data', width: 700 });"); 
+0

怎麼樣'typeof運算($ )!='undefined''? – ShankarSangoli 2012-04-03 20:56:30

+1

@ShankarSangoli,好點。我已經更新了我的回答,並將其納入jQuery測試中。 – 2012-04-03 20:57:47

+0

@Darin - 非常感謝!這個伎倆。 – Jagd 2012-04-03 21:53:13