javascript的事件加载

本文介绍了一个实用的JavaScript技巧,能够将文本区域的内容在一个新窗口中运行。此外,还深入探讨了页面加载完成事件的多种触发方式及其实现原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


======================================================
注:本文源代码点此下载
======================================================

评论

1737287

#1楼

2009-08-26 18:07

lola

写的很好,你的“运行代码”是怎么弄出来的呢?

回复 引用 查看

#2楼[楼主]

2009-08-26 18:12

司徒正美

@lola

网上教程一大把,自己google吧。我这个考虑到许多情况,实现非常复杂。网上的基本三行搞定。

回复 引用 查看

#3楼

2009-08-26 20:20

蔡九毜

引用司徒正美:

@lola

网上教程一大把,自己google吧。我这个考虑到许多情况,实现非常复杂。网上的基本三行搞定。

就把你的那些想法说出来,或者写篇文章出来,晒晒也不错啊

回复 引用 查看

#4楼[楼主]

2009-08-26 20:37

司徒正美

@蔡九毜

我不太愿意别人做无关主题的讨论,既然说到这份上,就说说吧。其实真的没什么的。

1首先我们取得textarea的内容,这个简单,就是它的innerhtml

2创建一个新窗口,就是var newwin = window.open('','','');

3然后就是为新窗口添加内容,即newwin.document.write(code);

完整代码是这样

var code = document.getelementbyid(id).innerhtml;

if (code!=""){

var newwin = window.open('','','');

newwin.opener = null;

newwin.document.write(code);

newwin.document.close();

}

以后有问题可以通过短信留言给我,我有空一定会帮忙,但请不要这样问与主题无关的问题。

回复 引用 查看

#5楼

2009-08-26 21:59

ryan gene

这文章不错啊,那个ready的代码先收下了,以后可以代替window.onload,window.onload感觉稍微有点慢,呵呵

回复 引用 查看

#6楼

2009-08-26 23:22

菜鸟2009[未注册用户]

作为研究还是有意义的。

但是,实际上我们确实只需要$().ready()

回复 引用

#7楼

2009-08-27 09:39

freewind

学习...

想问下为什么这样写?

obj["e"+type+fn] = fn;

obj.attachevent( "on"+type, function() {

obj["e"+type+fn]();

} );

为什么不直接用obj.attachevent( "on" + type, fn); ?

还有第一个应该没错.

window.onload = fn();只是这里提前调用了。

回复 引用 查看

#8楼

2009-08-27 10:23

momofiona[未注册用户]

不好意思,里面有个示例代码错了。

if (typeof window.onload != 'function') {

window.onload = fn();

}else {

window.onload = function() {

oldonload();

fn();

}

上面window.onload = fn();

应改成window.onload = fn;

你在注册onload事件时就运行了fn,此时还没加载到body当然会出错。

回复 引用

#9楼

2009-08-27 10:45

别爱上哥,哥只是个传说!

jquery

回复 引用 查看

#10楼[楼主]

2009-08-27 10:45

司徒正美

@freewind

快一点点吧,这个已是当前元素的成员,就用不着到外围作用域取fn了。

回复 引用 查看

#11楼[楼主]

2009-08-27 10:56

司徒正美

@momofiona

谢谢你的提醒,以前学习javascript死记硬背不求甚解但又不心小记错了的恶果。原来我一直把这个分支的绑定函数提前运行了……

回复 引用 查看

#12楼

2009-08-27 11:45

xman111[未注册用户]

if(!+"\v1"){

(function(){

try {

document.documentelement.doscroll("left");

} catch(e) {

settimeout( arguments.callee, 0 );

return;

}

loadevent();

})();

}

楼主能不能解释一下 这里面的 arguments.callee 指向的不是此function(){}()本事,而是 外围函数。

回复 引用

#13楼

2009-08-27 11:48

xman111[未注册用户]

不好意思,打错字 本事-> 本身

回复 引用

#14楼[楼主]

2009-08-27 13:18

司徒正美

@xman111

arguments.callee 表示对函数对象本身的引用,也就是那个闭包,

(function(){

try {

document.documentelement.doscroll("left");

} catch(e) {

settimeout( arguments.callee, 0 );

return;

}

init();

})();

不是onready函数。

我们可以把问题最简化为

var a = {};

a.b = function(){

alert(arguments.callee)

}

a.b();

回复 引用 查看

#15楼

2009-08-27 13:53

xman111[未注册用户]

(function(){})() 这样的方式就是创建函数并执行了吧。为什么还要去执行(settimeout)一次。我有点困惑。

回复 引用

#16楼[楼主]

2009-08-27 14:57

司徒正美

@xman111

就是不断执行,直到dom树完成,只有dom树完成后才有doscroll这个方法。

回复 引用 查看

#17楼

2009-08-27 15:08

xman111[未注册用户]

明白了,谢谢,问一下这样使用,会不会造成内存的溢出。

回复 引用

#18楼[楼主]

2009-08-27 17:45

司徒正美

@xman111

不会,如此干净简单的循环都内存泄漏,开发商可以去死了!

回复 引用 查看

#19楼

2009-08-29 11:25

阿k&livecai

呵呵lz写的很好啊,一定花了很长时间想的吧,呵呵支持

回复 引用 查看

#20楼

2009-08-29 11:51

cloudgamer

1 按功能判断比if(!+"\v1"){ 好

2 小问题,可以直接js.onready = function(loadevent) {

3 大问题,多次调用onready 会产生多个闭包,其实那个闭包只需要一个,把loadevent整合一下吧

回复 引用 查看

#21楼[楼主]

2009-08-30 14:16

司徒正美

@cloudgamer

1不明白什么叫做按功能判断,这个凡是ie就通杀吧。

2分开写条理清楚点,就像jquery的each,css等也分开写

3这个真的要请救你了,不过我看到jquery也是这样实现的,应该没什么问题吧。

回复 引用 查看

#22楼

2009-09-05 15:21

cloudgamer

@司徒正美

你不是分析过de的addevent的嘛

看看他怎么把事件都加载在onxxx中的而且还可以移除

回复 引用 查看

#23楼

2009-09-22 15:17

瓜籽

有一个地方不太理解。

代码中的"if(!+'\v1'){}"是什么意思呀?

回复 引用 查看

#24楼[楼主]

2009-12-30 01:20

司徒正美

2009/12/30改

回复 引用 查看


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值