Как я могу использовать getElementById для элемента управления, созданного в коде позади? - PullRequest
2 голосов
/ 26 июля 2010

Я пытаюсь использовать события onmouseover и onmouseout для таблицы td, созданной на стороне клиента, так что, когда пользователь наводит курсор на ячейку таблицы, панель становится видимой, а когда они мышью, панель становится невидимой,

<table>
    <tr>
        <td onmouseover="ToggleVisibility('FileHeader', true);" onmouseout="ToggleVisibility('FileHeader', false);">
            Some content goes here.                         
        </td>
    </tr>
</table>

Onmouseover и onmouseout вызывают следующую функцию javascript, также определенную на стороне клиента.

<script language="javascript" type="text/javascript">
    function ToggleVisibility(id, visible) {
        var content = document.getElementById(id);
        if (content != null) {
            if (visible) {
                content.style.display = "block";
            } else {
                content.style.display = "none";
            }
        }
    }
</script>

Идентификатор, который я передаю getElementByID, является идентификаторомдля элемента управления Panel, созданного в коде позади во время Page_Load.Панель добавляется в другую таблицу, которая определена на стороне клиента следующим образом:

<asp:Table ID="HelpTable" runat="server"></asp:Table>

Вот панель, созданная и добавленная в таблицу в следующем коде:

TableRow row = new TableRow();
HelpTable.Rows.Add(row);
TableCell cell = new TableCell();
row.Cells.Add(cell);

Panel pFileHeader = new Panel();
pFileHeader.ID = "FileHeader";
pFileHeader.Style.Add("Display", "none");

cell.Controls.Add(pFileHeader);

(Панель pFileHeader содержит фактическое содержимое (метки с текстом и т. Д.), Которое я упустил для простоты).

Когда эта панель создается на стороне клиента, моя функция ToggleVisibility работает нормально, но когда Panel создается в коде позади, getElementById возвращает значение null.Я довольно новичок в JavaScript, и был бы признателен за любую помощь.Спасибо!

1 Ответ

1 голос
/ 26 июля 2010

Asp.net автоматически присваивает имена всем идентификаторам ваших объектов runat = server.Вы можете получить искаженный идентификатор, используя свойство clientId.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...