ScriptManager.RegisterClientScriptBlock和jQuery在Internet Explorer 8中存在问题

8

我想在页面上使用 jQuery 的 jGrowl 插件 (http://stanlemon.net/projects/jgrowl.html#samples) 来显示一些信息。为此,我调用 ScriptManager.RegisterClientScriptBlock 方法,如下所示:

ScriptManager.RegisterClientScriptBlock(this, typeof(Page), Guid.NewGuid().ToString(),
   "$.jGrowl('" + message + "');", true);

在Firefox/Chrome/Safari浏览器中,代码表现完美。但是在Internet Explorer浏览器中我没有看到通知并且没有收到任何Javascript错误信息。我使用Windows 7操作系统,在Internet Explorer 8 Beta(版本8.0.7000.0)下使用兼容模式也遇到同样的“bug”。如何解决这个问题?
3个回答

12

这个问题的原因是IE8期望在修改DOM之前,所有DOM元素都已经加载完毕。我用jGrowl复制了你描述的问题。

要解决它,我只需要修改你的脚本,使得调用jGrowl的操作在文档准备好后执行。以下是更新后的代码:

ScriptManager.RegisterClientScriptBlock(this, typeof(Page), 
     Guid.NewGuid().ToString(),
     "$(function(){$.jGrowl('" + message + "');});", true);

谢谢你的回答。我尝试了你的修复方法,但仍然无法正常工作。可能是因为页面上有一个更新面板的缘故吗? - Stefan Filip
我已经使用更新面板测试了这段代码,它运行良好。您是否实际复制/粘贴了上面的代码?在浏览器中是否出现任何JavaScript错误? - Jose Basilio
如果你仍然遇到问题,你可能需要升级到 IE8 的最终版本,而不是 Beta 版本。 - Jose Basilio

2
<form runat="server" id="form1"> 添加到页面中。它会正常工作...

0
如果我没记错的话,我认为你需要在客户端页面中添加这个。
<script language="javascript" type="text/javascript" id="forModalPopUp">
    var prm =  Sys.WebForms.PageRequestManager.getInstance();
    prm.add_initializeRequest(InitializeRequest);
    prm.add_endRequest(EndRequest);
    function InitializeRequest(sender, args) {
    }
    function EndRequest(sender, args) {
    }
</script>

欲获得更多细节,请查看this


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接