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 が定義されていないというエラーが表示されます。非同期ポストバックに登録した JavaScript は、マークアップで定義した JavaScript 関数を使用できないということですか?

助けてくれてありがとう。

4

1 に答える 1

2

RefreshData匿名のコールバックである document.ready 関数内で関数を定義しないでください。外部からアクセスできるように外部で定義します。

<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 });");
于 2012-04-03T20:51:54.280 に答える