同一段js代码,前面加alert之后就能执行成功,如果去掉alert语句就执行失败,为什么?

time_is_life 2007-05-12 01:53:24
同一段设置层属性的js代码,
前面加alert之后就能执行成功,
如果去掉alert语句就没有反应,
我想可能是如果不加alert,层还没有加载完的原因吧.
可是现在我不想弹出alert,
该如何才能让这段js代码生效哪?
谢谢
...全文
1575 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
time_is_life 2007-05-13
  • 打赏
  • 举报
回复
好用了,谢谢
yixianggao(你我他,三人行必有我师焉!) ( ) 信誉:100 Blog 加为好友
yixianggao 2007-05-12
  • 打赏
  • 举报
回复
只能用延时了,没找到有什么事件可用!

写了个例子,如果不调用延时函数,而是直接执行 resizeDiv 里的两句话就会遮住右侧滚动条,

例子中延时 100 毫秒后能自动调整了,如 LZ 所愿!

仅仅是实现了功能,但原理还不十分清楚,暂且解释为加载延时吧,时长只能凭经验估计了,
因为找不到事件!

大家都来说说!


代码如下,LZ 更具自己的情况改改吧:

<body>
<div id="divForItemContent" style="filter:alpha(opacity=50);width:500px; height: 100px; font:20;z-index:1000;background-color:#FF0000; position:absolute; left: 11px; top: 85px;"></div>

<div id="divItemContent" style="overflow: auto; width:500px; height: 100px; font:20;z-index:999;background-color:#0000ff;position:absolute; left: 11px; top: 85px;">
</div>

<script type="text/javascript">
<!--
divItemContent.innerHTML = "<br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br />";

// 延时时段,单位 毫秒,1秒=1000毫秒。
var delayInterval = 100;
window.setTimeout(resizeDiv, delayInterval);
function resizeDiv()
{
divForItemContent.style.width = divItemContent.clientWidth;
divForItemContent.style.height = divItemContent.clientHeight;
}
//-->
</script>
</body>
yixianggao 2007-05-12
  • 打赏
  • 举报
回复
嗯,够了,不过俺没这么做过,只能试试看!

基本思路就是,用延时函数处理,等内容加载完毕后再设置宽、高,

可是问题就是从何得知内容已加载完毕?!

先顶上去,俺去试验一下!
time_is_life 2007-05-12
  • 打赏
  • 举报
回复
用divForItemContent盖住divItemContent
time_is_life 2007-05-12
  • 打赏
  • 举报
回复
打错了,
divForContent应该是divForItemContent
共有两个div: divItemContent 和 divForItemContent .
所以这句应该是:
<div id="divForItemContent" style="filter:alpha(opacity=0);width:503px;font:20;z-index:1000;background-color:#FF0000;position:absolute; left: 11px; top: 85px; height: 87px;"></div>
---------------------------------------------------------------------------
这句话:
document.getElementById("divItemContent").innerHTML = document.getElementById("<%= txtContent.ClientID %>").value;

是把服务器端的TextBox的内容复制到客户端的div中.
要复制的内容很多,具体的内容是Html格式的内容,可能包含文本,图片,链接等.
最长可能达到几万字.

Html的代码太长,而且与其他页面关联.不知道上述信息是否足够,谢谢

yixianggao 2007-05-12
  • 打赏
  • 举报
回复
divForContent —— html

divItemContent —— JS

divForItemContent —— JS

怎么是三个 div ?请把 html 代码贴完全!

document.getElementById("divItemContent").innerHTML = document.getElementById("<%= txtContent.ClientID %>").value;

document.getElementById("<%= txtContent.ClientID %>").value; ——内容很多么?具体内容是什么?

似乎就是加载的问题!
time_is_life 2007-05-12
  • 打赏
  • 举报
回复
to yixianggao(你我他,三人行必有我师焉!)

以下是代码,代码的功能是用一个div将另外一个div盖住,但是当被盖住的div有滚动条时,不能把滚动条也盖住。

这里的代码包含两种实现方式:
第一种是通过Ajax的ScriptManager.RegisterStartUpScript来调用,这种调用能够使div可见,但是把滚动条也盖住了,说明代码执行时滚动条还没有出现。
第二种是用ajax的EndRequest来调用,也是一样,能够使div可见,但是把滚动条也盖住了,说明代码执行时滚动条还没有出现。

在第二种方法中,如果在调整div大小前调用一下alert,执行的时候点击完alert确定按钮之后,滚动条就不被盖住了,说明执行有效了。

现在不想出现alert,该如何才能实现这个功能哪?
谢谢
-------------------------

<div id="divForContent" style="filter:alpha(opacity=0);width:503px;font:20;z-index:1000;background-color:#FF0000;position:absolute; left: 11px; top: 85px; height: 87px;"></div>


<script type="text/javascript">
//这里是ajax的EndRequest事件
function EndRequest (sender, args)
{
if( postBackElement.id == document.getElementById("<%= tvItems.ClientID %>").id )
{
//fill the item content back into the divContent from server-side control.
document.getElementById("divItemContent").innerHTML = document.getElementById("<%= txtContent.ClientID %>").value;

   divForItemContent.style.display = "block";//这句执行成功了
// alert(divItemContent.clientWidth);

divForItemContent.style.width = divItemContent.clientWidth;
divForItemContent.style.height = divItemContent.clientHeight;

}
}

//自己写的函数
function ShowDivForContent()
{
divForItemContent.style.display = "block";
divItemContent.style.borderColor = "#000000";
divForItemContent.style.width = divItemContent.clientWidth;
divForItemContent.style.height = divItemContent.clientHeight;
}
</script>

<script runat="server">
ScriptManager.RegisterStartupScript(UpdatePanel4, this.GetType(), DateTime.Now.ToString(), "ShowDivForContent();", true);
</script>
yixianggao 2007-05-12
  • 打赏
  • 举报
回复
ClientScriptManager.RegisterStartupScript Method (Type, String, String)

The script block added by the RegisterStartupScript method executes when the page finishes loading but before the page's OnLoad event is raised.

看来不是位置的问题,是不是用了 iframe 或 frame 什么的?

LZ 到底想实现什么效果,并且把脚本代码和 html 页面代码贴出来看看!

大家帮你分析分析!
time_is_life 2007-05-12
  • 打赏
  • 举报
回复
to
yixianggao(你我他,三人行必有我师焉!)

我是在服务器端用ScriptManager.RegisterStartUpScript注册的.
可是不用alert就不行,
怎么样在服务器端把js注册到你说的位置阿
yixianggao 2007-05-12
  • 打赏
  • 举报
回复
如果是嵌入页面的脚本,有两种办法,

1 加 defer 属性,即:<script type="text/javascript" defer>...

2 调整代码位置,放到 </body> 之前,即 ...</script></body>

LZ 自选!
dh20156 2007-05-12
  • 打赏
  • 举报
回复
"我想可能是如果不加alert,层还没有加载完的原因吧."

既然你知道原因,那就按这个去解决问题啊,让脚本加载完再执行你要的事件!
如果是XMLHTTP,建议使用异步加载方式进行处理!
rjzou2006 2007-05-12
  • 打赏
  • 举报
回复
哪是因为没有加载完页面的原因

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧