首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RegisterClientScriptBlock代码未执行

RegisterClientScriptBlock代码未执行
EN

Stack Overflow用户
提问于 2010-04-12 19:31:01
回答 3查看 3K关注 0票数 0

我使用以下代码来尝试在客户端显示一个带有错误列表的对话框:

代码语言:javascript
复制
    if (rollout.ImportErrors.Count > 0)
    {
        ClientScript.RegisterClientScriptBlock(GetType(), "showErrors", "showErrors();", true);
    }

错误计数为非零,并发出以下脚本块,但脚本没有执行。

代码语言:javascript
复制
<script type="text/javascript">
//<![CDATA[
$("#error-report").dialog("open")//]]>
</script>

如果我直接从Firebug控制台窗口调用该函数,对话框将正确显示,因此我知道该对话框和我的代码正在工作。我做错了什么?

顺便说一句,这段代码在内容页面中,使用了一个内容占位符,该占位符将代码“注入”到呈现页面的元素中。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-04-12 19:35:20

我认为你应该尝试RegisterStartupScriptBlock而不是RegisterClientScriptBlock...

请查看以下解释:

RegisterClientScriptBlock紧跟在开始标记之后插入脚本,而RegisterStartupScript紧跟在结束标记之前添加脚本。

在IE中,HTML DOM是以串行方式创建的。所以你的头信息将首先被处理,你的表单对象将被创建,你的RegisterClientScript将被解析(如果不在功能块中将被执行)你的控件将被创建,然后你的RegisterStartupScript将被解析(如果不在功能块中将被执行)。

因此,至少在IE中,如果您将代码放在RegisterStartupScript中,基本上可以保证脚本可以访问的任何表单元素都存在。相反,基本上可以保证脚本的任何表单元素都不会存在于RegisterClientScript块中,代码也不会存在于功能块中。

票数 3
EN

Stack Overflow用户

发布于 2010-04-12 19:33:53

在这种情况下,您需要包装它,如下所示:

代码语言:javascript
复制
$(function() { $("#error-report").dialog("open"); });

它只是将它放在页面中,但DOM可能还没有准备好(它是当您在控制台中运行它时,这就是它在那里工作的原因)。就像您直接在页面中编写脚本一样,包装它,使其在document.ready之前不会执行。

票数 0
EN

Stack Overflow用户

发布于 2010-04-12 20:48:16

你可以在http://www.jdxyw.com/?p=411上看一下

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2621651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档