ASP.NET: Почему мой объект JavaScript установлен в нуль? - PullRequest
0 голосов
/ 29 апреля 2010

У меня есть <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

Ответы [ 3 ]

3 голосов
/ 29 апреля 2010

Я предполагаю, что ваш код JavaScript выполняется до того, как ваш браузер сможет полностью отобразить таблицу.На этом этапе DOM страницы не будет завершен, и функция getElementByID не сможет найти таблицу, поскольку она еще не существует!

Выполните этот эксперимент:

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

<script language="javascript">

    function showTable() {

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

        alert(tbl);
    }

    showTable();

</script>

Это покажет вам «ноль» при первой загрузке вашей страницы.Однако, если вы добавите кнопку для повторного вызова этого метода, вы увидите, что tbl заполняется.

<input type="button" value="CheckTable" onclick="showTable();" />
1 голос
/ 29 апреля 2010

MrGumbe и Валера правы насчет времени вашего Javascript. Но я видел это по другой причине. У нас были случаи, когда серверная логика устанавливала tblSelection.Visible = false, что означает, что она даже не передается в браузер. Код на стороне клиента, такой как ваш, работает в поисках идентификатора и взрыва.

1 голос
/ 29 апреля 2010

Ник правильный. Таблица еще не проанализирована / построена. Попробуйте переместить код getElementById в событие document.ready . Кстати, JQuery предоставляет хорошую оболочку для событий документа и многое другое.

Вот фрагмент кода:

$(document).ready(function()
{
    $get('table-id').doManipulation();
});
...