封装一个js类,出错 'this.initialize ' 为空或不是对象

godgreat 2009-01-03 11:04:23
主要功能显示,屏蔽所有不能正常显示的图片,自定义显示图片
js代码
-------------
var isIE = (document.all) ? true : false;

var $ = function(id) {
return "string" == typeof id ? document.getElementById(id) : id;
};

var Class = {
create: function() {
return function() {
this.initialize.apply(this, arguments);
}
}
}

Object.extend = function(destination, source) {
for (var property in source) {
destination[property] = source[property];
}
return destination;
}

var ImageError = Class.create();
ImageError.prototype = {
initialize: function() { },
arrImg: document.getElementsByTagName("img"),
checkImg: function() {
for (var i = 0; i < this.arrImg.length; i++) {
this.arrImg[i].onError = this.changeImg(this.arrImg[i]);
}
},
changeImg: function(img) {
img.src = "/A.gif";
}
}
-------------------------
后台调用:
Page.RegisterStartupScript("", " <script>javascript:document.body.onload= function(){var imgerror = new ImageError()} </script>");
---------------------------
如果我的写法有错误,帮忙解释清楚,谢谢您!,如果您有更好的方法,请您不吝指教,谢谢
...全文
399 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
过河石头 2009-01-05
  • 打赏
  • 举报
回复

问题根本的原因是 onError 没有写在 Img 标签内部,比如:

<Img onError="errFunc()" src="123.jpg"/>;

通过Js动态绑定的 onError 执行不到!

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>无标题页</title>

<script type="text/javascript" language="javascript">
window.onload = function()
{
var arrImg = document.getElementsByTagName("img");
alert("图片张数:" + arrImg.length);
for (var i = 0; i < arrImg.length; i++)
{
arrImg[i].onError = function() {
alert('我是动态绑定的!')
}
}
}
</script>

</head>
<body>
<img src="错误的图片地址" onError="alert('我是写在标签里的!')"/>
</body>
</html>


注意弹出窗口的顺序:

一、我是写在标签里的!
二、图片张数:1

根本没有执行到 alert('我是动态绑定的!'),楼主可以手动在 Img标签里边添加 onError 处理函数尝试一下.


午夜咖啡男 2009-01-05
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 asdfgh_5982 的回复:]
运行后,this对象不是类ImageError对象了,ImageError被覆盖成一个新的对象了。
var Class = {
create: function() {
return function() {
this.initialize.apply(this, arguments);
}
}
}

[/Quote]

不存在覆盖啊,var ImageError = Class.create();
此时 ImageError = function(){ this.initialize.apply(this, arguments); }
之后改写prototype,没有问题
asdfgh_5982 2009-01-05
  • 打赏
  • 举报
回复
运行后,this对象不是类ImageError对象了,ImageError被覆盖成一个新的对象了。
var Class = {
create: function() {
return function() {
this.initialize.apply(this, arguments);
}
}
}
午夜咖啡男 2009-01-04
  • 打赏
  • 举报
回复
测试了一下,ie8和chrome下代码和对象本身没有问题,可能是你调用的时间不对
usaspy 2009-01-04
  • 打赏
  • 举报
回复
函数调用要在页面完全下载之后进行
Page.RegisterStartupScript("", " <script>window.onload=javascript:document.body.onload= function(){var imgerror = new ImageError()} </script>");
阿云ivan 2009-01-04
  • 打赏
  • 举报
回复
元旦回来
帮顶一下~
success000 2009-01-04
  • 打赏
  • 举报
回复
不懂,帮顶
不悲不喜 2009-01-04
  • 打赏
  • 举报
回复
UP

87,910

社区成员

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

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