0

我有一个包含在 UpdatePanel 中的 asp.net 按钮,单击它时会执行异步回发并注册一些显示 jquery 对话框的 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 is not defined。这是否意味着我在异步回发中注册的任何 javascript 都将无法使用我在标记中定义的 javascript 函数?

谢谢您的帮助。

4

1 回答 1

2

不要RefreshData在作为匿名回调的 document.ready 函数中定义函数。在外部定义它,以便外部可以访问它:

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

此外,您可能不需要包装在文档中。准备好您的服务器端包括:

StringBuilder jqueryDialog = new StringBuilder();
jqueryDialog.Append("RefreshData();");
jqueryDialog.Append("$('#divData').dialog({ modal: false, draggable: true, title: 'Historical Data', width: 700 });");
于 2012-04-03T20:51:54.280 回答