作者sk1765 (鼎玉铉)
看板Ajax
标题Re: [问题] JavaScript如何Remove掉onload?
时间Tue Nov 1 14:13:42 2011
※ 引述《gs1458 (hoi)》之铭言:
: 大家好,我又来了...( 艹)
: 这是昨天小弟弄包覆的问题发现的。
: 这是HTML:
: <img src="example.jpg" onload="loadImg(this);" />
: 这是JavaScript:
: function loadImg(me) {
: me.title = me.src;
: me.onload = function(){};
: //me.onload = null;
: }
: 完整内容:
: http://pastie.org/2785012
: 我想做的事情很明显是要把onload给清除掉,
: 但是不晓得语法是不是错误的一直都清不掉,
: 发现这个问题是因为昨天我用克隆的方式来作div包覆的动作,
: 会造成image一直进行无穷回圈的onload问题,
: 网路上大多都是介绍onload如何使用,
: 敝人找到关於Remove这个内容的文献似乎都无效,
: 於是就再来请教各位了,谢谢。
你这个是cloneNode的问题 跟无穷回圈没关系阿
cloneNode会将元素复制 但是教科书上有写所有属性都复制 事件处理常式却没复制
所以应该在
http://pastie.org/2788559 程式中的14行
image.cloneNode(true) 复制出来的物件 应该是没有onLoad事件的处理常式
不过记既然执行一直在重复跑onLoad 表示onLoad处理常式也复制到了
因此当append时 新的复制元素执行了他的onload
我测试ie ff都会
但是你用image.removeAttribute('onload');没用阿
因为image代表原先那个被复制的元素 你要删的是新产生的元素
所以将
http://pastie.org/2788559 程式多加一个参数 改一改就好
以下请参考
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="
http://www.w3.org/1999/xhtml" lang="zh-TW" xml:lang="zh-TW">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Image</title>
<script type="text/javascript">
function wrap(image) { //包覆img
alert('good'); //测试是否重复执行
//image.onload = function(){}; //为了先清掉onload再克隆才不会无穷回圈
//image.onload = null;
if(image.width>800 || image.height>600) { //我是要做到图片太大时加上超连结
var alink = document.createElement('a');
alink.target = "_blank";
alink.href = "
http://www.google.com/";
//alink.appendChild(image.cloneNode(true)); //克隆一目标
//将以上分三行拆开写 并将新物件的onload换成空物件
var x= image.cloneNode(true);
x.onload = function(){};
alink.appendChild(x);
image.parentNode.replaceChild(alink, image); //取代旧有目标
}
}
</script>
</head>
<body>
<img id="myimg" src="example.jpg" onload="wrap(this);" />
</body>
</html>
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 175.182.110.233
1F:推 gs1458:这也是个好方法,非常感谢您的解答m(_*_)m 11/01 22:49
2F:推 gs1458:另外,当没有cloneNode时清除还是得靠removeAttribute :) 11/01 22:51
3F:推 gs1458:题外:你名字跟我一样都有铉耶XD 11/01 22:55