不能执行已释放 Script 的代码 在线急等....

Cookia 2007-01-22 05:14:37
好郁闷的说。。没分了。。换朋友号开个帖子。。
出问题的代码经过我仔细查找发现是Interval那个闭包的问题。。。
希望有经验的前辈们帮忙解决。。。
这段代码单独测试没有问题。。。。
可是放到首页里就出问题了。。。。。(绝无变量冲突等问题。。。)
因为刷新后这个问题就消失了。。。。
我艘了下。。。有人问过但是没有艘到答案。。。。
<html>
<head>
<style type="text/css">
html, body {
margin:0px;
padding:0px;
}
#lwc, #rwc {
display:none;
width:100px;
height:500px;
background:#009999;
border:#336699 1px dashed;
}
</style>
<script type="text/javascript">
(function () {
var interval = window.setInterval;
window.setInterval = function (a, b) {
var fun, arg;
if ("function" == typeof a) {
arg = Array.prototype.slice.call(arguments, 2);
fun = function () {
a.apply(null, arg);
};
} else fun = a;
return interval(fun, b);
};
})();

function $(id) {
return document.getElementById(id);
}

function scrollBanner(timer, moveNumber) {

function create(root) {
var div = document.createElement("div");
return root.appendChild(div);
}

function move(o) {
var st = document.body.scrollTop + o.t;
var sl = document.body.scrollLeft + (o.c == 0 ? o.a : document.body.clientWidth - o.a - o.offsetWidth);
var tc = st - o.offsetTop, lc = sl - o.offsetLeft;
with (o.style) {
top = o.offsetTop + (tc != 0 ? tc / Math.abs(tc) : 0) * Math.min(Math.abs(tc), moveNumber);
left = o.offsetLeft + (lc != 0 ? lc / Math.abs(lc) : 0) * Math.min(Math.abs(lc), moveNumber);
}
}

var hidden = function() {
var o = this.parent;
window.clearInterval(o.interval);
o.parentNode.removeChild(o);
}

this.add = function (to, t, a, c, lo) {
/*
o为object对象
t为距离顶端距离
当c = 0的时候,a为距离左边的距离
当c != 0的时候,a为距离右边的距离
clo为关闭按钮
*/
var o = create(document.body), div;
o.appendChild(to);
to.style.display = "block";

if ("undefined" != typeof lo) {
div = create(o);
div.appendChild(lo)
div.align = "center";
lo.onmousedown = hidden;
lo.parent = o;
}

o.t = t;
o.a = a;
o.c = c;
with (o.style) {
position = "absolute";
top = document.body.scrollTop + t;
left = document.body.scrollLeft + (c == 0 ? a : document.body.clientWidth - a - o.offsetWidth);
}
o.interval = window.setInterval(move, timer, o);
};
}

window.onload = function () {
var b = new scrollBanner(5, 3);
b.add($("lwc"), 50, 10, 0, $("lwc_c"));
b.add($("rwc"), 50, 10, 1, $("rwc_c"));
b = null;
}
</script>
</head>
<body>
<div id="lwc"></div>
<div id="rwc"></div>
<input id="lwc_c" type="button" value="关  闭" />
<input id="rwc_c" type="button" value="关  闭" />
<div style="height:1000px;"></div>
</body>
</html>
...全文
1428 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
btbtd 2007-01-23
  • 打赏
  • 举报
回复
...暂时放弃了...功力还是不够, 本来打算弄一个CMS系统..发现功力还是不够....
俺现在处于一个十字路口中, 你说是先深入 MSSQL 好呢还是先深入 JSCRIPT.NET 好?
两者都在一起显然有点不实际...
至于俺的ANSI SQL 和 MS JSCRIPT 俺是绝对朋信心的...给个小建议看看.
muxrwc 2007-01-23
  • 打赏
  • 举报
回复
问题找到了。。
(function () {
var interval = window.setInterval;
alert(interval);
window.setInterval = function (a, b) {
var fun, arg;
if ("function" == typeof a) {
arg = Array.prototype.slice.call(arguments, 2);
fun = function () {
a.apply(null, arg);
};
} else fun = a;
alert(interval);
return interval(fun, b);
};
})();
这样的话第一次 alert 的时候是interval那个fun
第二次的时候就是object了。。。不理解。。。。。
muxrwc 2007-01-23
  • 打赏
  • 举报
回复
- -#
to btbtd什么系统?

to hbhbhbhbhb1021
我看看把interval设置成全局变量也是同样的错误。。
我去分析分析。。看看具体是哪的错误。。

to all

我做个错误的页面让你们看下。。错误的样子。。。
地址:http://www.zhb.org.cn/index_rubbish.asp
muxrwc 2007-01-23
  • 打赏
  • 举报
回复
嘿嘿..刚梅老师也说没错误...
可能是IE打了补丁的缘故...
结贴啦...^o^
感谢各位楼上....
myvicy 2007-01-23
  • 打赏
  • 举报
回复
我的系统测试没报任何错误。
btbtd 2007-01-23
  • 打赏
  • 举报
回复
哈哈, 已经开始编译ing, 俺发现很顺手...闪...
muxrwc 2007-01-23
  • 打赏
  • 举报
回复
嘿嘿.既然有了目标就温柔的去吧...
偶支持你...
btbtd 2007-01-23
  • 打赏
  • 举报
回复
从实用上当然是MSSQL了, 现在学东西俺都可以很短时间内掌握的...
不过从长远上看, JSCRIPT.NET 对我来说可能更重要一点, 因为我要用这个实现CMS的功能, ASP 就是瓶颈问题, 突破不了....
其实俺已经打算从JSCRIPT.NET下手, 那个MSSQL对新手来说可能难上手, 不过对具备编程思想的人来说是小CASE...
muxrwc 2007-01-23
  • 打赏
  • 举报
回复
..........

寒了..你说的有东西我都没听过...哪个好学先学哪个(就是说你认为,学到可以实现功能的时间,比较短的那一个...)
wuxinlangman 2007-01-22
  • 打赏
  • 举报
回复
这段代码在什么样子的情况下会出现错误啊!没有找到错误
!也许水平比较菜帮你顶下
btbtd 2007-01-22
  • 打赏
  • 举报
回复
路过, 精神上支持一下, 俺自己的问题尚未解决...一个权限系统设计中....
muxrwc 2007-01-22
  • 打赏
  • 举报
回复
window.setInterval
这样的话找对象出错了?
这个是全局的方法啊..
我给它付了个fun...
应该没有问题的啊...
并且我修改了add方法就好用了...思路是一样的..可是写的地方不一样就错了...
- -#
那个连接我给盖了..因为这个东西一会要弄出来..所以先把对的弄上...^o^
可是我贴的那些代码就是会产生那个错误..(就是0楼的代码)
muxrwc 2007-01-22
  • 打赏
  • 举报
回复
昂?
那个写下面的话..那我的伟大的window.setInterval方法不挂啦...
muxrwc 2007-01-22
  • 打赏
  • 举报
回复
对了..这个http://www.zhb.org.cn/index_rubbish.asp测试地址已经改对了..
因为..这个...比较着急所以先弄对了....
可是..那个什么什么释放的什么什么错误到底是为什么啊?
那个明明还有个对外的方法,它为什么释放呢....不理解..
hbhbhbhbhb1021 2007-01-22
  • 打赏
  • 举报
回复
这样的错误我遇到过几次,不好查错误。因为有些地方错误不是总报错的,你给的那个连接我上去看了下也不报错。感觉上你的代码确实是那个重写造成的
var interval = window.setInterval;这句写在外面试下呢?最好不要写在function中
就直接向下面这样写,错误的原因很可能是按你的写法window.setInterval 去找对象的时候报错
var interval = window.setInterval;
window.setInterval = function (a, b) {
var fun, arg;
if ("function" == typeof a) {
arg = Array.prototype.slice.call(arguments, 2);
fun = function () {
a.apply(null, arg);
};
} else fun = a;
return interval(fun, b);
};
muxrwc 2007-01-22
  • 打赏
  • 举报
回复
this.add = function (to, t, a, c, lo) {
/*
to为object对象
t为距离顶端距离
当c = 0的时候,a为距离左边的距离
当c != 0的时候,a为距离右边的距离
lo为关闭按钮
*/
var o = create(document.body), div;

var exec = function () {
move.call(null, o);
};

o.appendChild(to);
to.style.display = "block";

if ("undefined" != typeof lo) {
div = create(o);
div.appendChild(lo)
div.align = "center";
lo.onmousedown = hidden;
lo.parent = o;
}

o.t = t;
o.a = a;
o.c = c;
with (o.style) {
position = "absolute";
top = document.body.scrollTop + t;
left = document.body.scrollLeft + (c == 0 ? a : document.body.clientWidth - a - o.offsetWidth);
}

o.interval = window.setInterval(exec, timer);
};
修改add方法到是可以解决..但是那个具体是什么问题啊????
- -#
今天人好少的说...
ishion 2007-01-22
  • 打赏
  • 举报
回复
MARK
muxrwc 2007-01-22
  • 打赏
  • 举报
回复
http://www.zhb.org.cn/index_rubbish.asp
如果想看看问题..可以从这个页面查看...

87,910

社区成员

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

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