在 AJAX 的 onreadystatechange 中怎样自定义一个事件?

xuyang0109 2006-08-29 12:10:48
我需要在使用AJAX读取了一个文件之后,用JS改变容器的高度。
比如文件读入 <div id="Target"></div>,由于读入的文件大小不一,可能改变容器 Target 的高度。
我所有的网页元素都使用了绝对坐标,高度改变后,需要用JS得到容器新的高度,由此改变其他div的位置。

我把AJAX处理的代码都封装在一个类里面,由this.定义公共的属性和方法。
本来在 onreadystatechange 调用的函数中定义了一个外部能够访问的属性——this.TargetDIVHeight,但文件读入之后,目标容器的新高度并没有得到。
经过多次测试,发现只在 onreadystatechange 调用的函数中才能得到新高度(条件是CSS并没有设定这个容器的height),新高度虽然代入了this.TargetDIVHeight,但是外部不能得到。

于是想到,我的AJAX封装在一个类里面,能否在onreadystatechange 调用的函数中 readyState==4 && status == 200 之后定义一个事件。
在外部捕捉这个事件,事件发生后,外部就应该能正确得到容器的新高度。

网上找到这样的代码:
class1.prototype =
{
show:function()
{
//show函数的实现
this.onShow(); //触发onShow事件
},
onShow:function(){} //定义事件接口
}
但我看不懂该怎样实现我的需求。

那位高手帮帮忙,我该怎样自定义一个事件?在外部怎么使用?
谢谢!
...全文
175 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuyang0109 2006-08-31
  • 打赏
  • 举报
回复
谢谢关注!

不过很抱歉,好像和我的问题无关。

不过我已经解决了这个问题,但不是用“事件”的概念,而是“偶然”解决的。

我把AJAX相关的代码都封装在类中,采用了 onreadystatechange = function(){...}的方法。
这个类是另外一个文件,HTML文件包含了这个JS文件。

按理说,onreadystatechange = function(){...} 的function()内部的变量的作用域只在内部,外部不能访问,里面也不能访问外部。但我使用改变后的实际高度进行处理的函数(声明在引用AJAX类的HTML文件中!),在onreadystatechange 的 function() 里面居然能够调用!于是我也不需要费力使用事件了。
纷享刘晨 2006-08-30
  • 打赏
  • 举报
回复
javascript是可以将方法当作变量来传递的,只要不加(),就不会执行

外部定义function showAlert(){...;}
然后将showAlert传入Ajax类中ajaxContentLoader(...,...,showAlert){...;}

然后
xmlHttpRequest.onreadystatechange = showAlert;
就可以了

你也可以传入一个定义好的类
function show(){
this.showAlert = function(){...;}
}
ajaxContentLoader(new show());

function ajaxContentLoader(oCom){
xmlHttpRequest.onreadystatechange = oCom.showAlert();//注意有括号
}


52,797

社区成员

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

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