0

<script>はこの行を含むを持っています:

var tbl = document.getElementById("<%= this.tblSelection.ClientID %>");

...しかし、tbl常にに設定されることになりnullます。

テーブルは次のように宣言されます。

<asp:Table ID="tblSelection" runat="server" CellPadding="2" CellSpacing="0"
    cols="1" style="position: absolute; top: 0%; right: 0%">

スクリプトとテーブルの両方が同じマスターページファイルにあります。

これを引き起こしている可能性がありますか?

編集:私はこのスクリプトがで実行されることに言及する必要がありますonload

4

3 に答える 3

3

ブラウザがテーブルを完全にレンダリングする前に、JavaScript コードが実行されていると思います。この時点では、ページの DOM は完成しgetElementByIDておらず、テーブルがまだ存在しないため、関数はテーブルを見つけることができません!

次の実験を行います。

<head runat="server">
<title></title>

<script language="javascript">

    function showTable() {

        var tbl = document.getElementById("<%= this.tblSelection.ClientID %>");

        alert(tbl);
    }

    showTable();

</script>

これにより、ページが最初に読み込まれたときに「null」が表示されます。ただし、このメソッドを再度呼び出すボタンを追加すると、値が設定されていることがわかりますtbl

<input type="button" value="CheckTable" onclick="showTable();" />
于 2010-04-29T18:01:04.867 に答える
1

ニックは正しいです。テーブルはまだ解析/構築されていません。getElementByIdコードをdocument.readyイベントに移動してみてください。ところで、jQuery は、ドキュメント イベントなどの優れたラッパーを提供します。

コード スニペットは次のとおりです。

$(document).ready(function() {
    $get('table-id').doManipulation();
});
于 2010-04-29T18:04:18.063 に答える
1

MrGumbe と Valera は、Javascript のタイミングについて正しいです。しかし、私はこれが別の理由で起こるのを見てきました。サーバー側のロジックが tblSelection.Visible=false を設定するインスタンスがありました。これは、ブラウザーにも出力されないことを意味します。あなたのようなクライアント側のコードは、ID と bang を探して実行されます。

于 2010-04-29T18:10:16.340 に答える