在ClientScript.RegisterClientScriptBlock之后显示/隐藏div CollapsePanel

时间:2009-05-29 08:53:47

标签: c# asp.net html

此问题是Showing/Hiding div的扩展。

如上所述,我找到了一种解决方法,可以防止Collapse面板在加载时闪烁。

我的解决方案是:

在标题中:      

    function showDivs() { 

                divMenuContent.style.visibility = 'visible';
                divMenuContent.style.display='block';


     }

</script> 

和div隐藏在div中:

<div id="divMenuContent" style="visibility:hidden; display:none;">
   <asp:Panel ID="pnlAddNewContent" runat="server" CssClass="collapsePanel" Width="500px">
   </asp:Panel>
</div>

和身体负荷是 的onLoad = “JavaScript的:showDivs();”

问题是,它在空白页面上完美运行。但我想当我做一个

ClientScript.RegisterClientScriptBlock(this.GetType(), "", sb.ToString());

它不起作用 - 因为在面板中没有崩溃/显示。上面的代码确实有效。

您是否认为clientScipt与我的javascript冲突以显示div?我在浏览器中没有收到任何Javascript运行错误。

更多信息:如果不是回发,则调用clientScript。我还试图通过在其末尾添加以下代码来调用客户脚本中的javascript:

sb.Append("\n}\nshowDivs();</script>\n");

但这次我收到以下错误:

  

divMenuConent未定义。

ANy解决方案?

2 个答案:

答案 0 :(得分:0)

如果我没记错的话,RegisterClientScriptBlock将其JS注入头部。可能是它将它注入你的代码之上。现在这可能意味着一些事情取决于注入的代码正在做什么。

  • 它是否会立即引用任何元素(记住这是在头部,所以你将无法弄乱DOM,因为它已经加载它,所有这些东西需要在onload之后)
  • 是否引用了divMenuContent,您可能只在其下面声明
  • 是否会抛出一个错误,导致你的其他内部JS停止运行。

在Firefox中使用firebug来仔细检查你是否没有得到任何有趣的JS错误并查看源代码并仔细检查你是否应该在你应该之前引用任何东西。

此外,我建议您考虑使用其中一个JS框架,以便您连接多个onload事件,这样您就不会冒着覆盖任何先前附加事件的风险。这允许您在页面加载时运行多个函数(甚至更好,也就是当DOM加载时更快)。我建议使用MooTools,你可以做这样的事情

// You can add as many of these as you like and they will all run :)
window.addEvent( "domready", function() {
  // Code to run goes here
});

答案 1 :(得分:0)

您可以将RegisterStartupScript用于此类要求。