2010-07-26 106 views
2

我想在客户端创建的表td上使用onmouseover和onmouseout事件,以便当用户鼠标悬停在表格单元格上时,面板变得可见,并且当它们被鼠标移出时,面板变得不可见。如何将getElementById用于在代码后面创建的控件?

<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是在Page_Load期间在代码中创建后面的面板控件的ID。小组添加到被在客户端定义像这样一个不同的表:

<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包含了我为了简单而忽略的实际内容(带有文本的标签等)。

当在客户端创建此Panel时,我的ToggleVisibility函数可以正常工作,但是当Panel在代码后面创建时,getElementById将返回null。我对JavaScript非常陌生,并希望得到任何帮助。谢谢!

+0

我明白你的问题,因为'getElementById返回null',Element的创建可能会有延迟的问题/机会。我不确定这个(只是猜测)。任何我需要查看'Demo'的方法。你可以发表一个链接到你的网页? – 2010-07-26 17:49:22

回答

1

Asp.net将自动命名为mangle的所有id你的runat =服务器对象。您可以使用clientId属性检索损坏的ID。

+0

谢谢!我现在调用ToggleVisibility这样(在公开pFileHeader之后): onmouseover =“ToggleVisibility('<%= pFileHeader.ClientID%>',true);” 而不是这样: onmouseover =“ToggleVisibility('FileHeader',true);” 它完美的作品!我有点尴尬,这很容易,但谢谢! – maguidhir 2010-07-26 19:09:25

相关问题