请教javascript高手,有关自定义事件,比较急

symbol_bc 2010-04-23 11:04:18
我现在需要这样一个功能,比如在页面中有这样一个元素
<div id="panel"><div/>

我有一些操作inerHTML的操作
document.getElementById("panel").innerHTML = "sdfsd";

我想在这个div元素上监听这个事件,每当有内容发生变化时都要触发。

在网上查了一些例子,onproperchange不触发,其他的自定义事件的方法都有局限性,比如说这个

function Element(value, domEL){
this.domEl = domEL;
this.domEl.getValue = function() { return value; };
this.domEl.setValue = function(newValue){
var isChange = false || value!=newValue;
value = newValue;
if(isChange && this.onValueChange) this.onValueChange();
};
this.domEl.buttonObj = this;
this.domEl.onValueChange=this.valueChangeHandler;
}

Element.prototype.valueChangeHandler=function(){
var buttonObj = this.buttonObj;
alert('value is changed to '+ buttonObj.domEl.getValue());
}

var b = new Element(1, document.getElementById("panel"));


一定要调用其中的setvalue方法才能触发。
高手指教!
...全文
176 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
打字员 2010-04-23
  • 打赏
  • 举报
回复
自己写个innerHTML行吗?


var Element = function(obj){
this.element = obj;
return this;
}
Element.prototype.innerHTML = function(txt, callBack) {
var _arg = [];
var _len = arguments.length;
for(var i = 0; i < _len; i++) {
_arg[i] = arguments[i];
}
var _oldTxt = this.element.innerHTML;
this.element.innerHTML = _arg.shift();
_arg.shift();
callBack.apply(window, [_oldTxt, txt].concat(_arg));
}
var $Element = function(id) {
var _obj = (typeof(id) == 'string')? document.getElementById(id) : id;
return new Element(_obj);
}

function alertIt(oldTxt, newTxt, str) {
alert(str);
}
$Element('box').innerHTML('ddd', alertIt, '内容改变了!');
wujinjian2008n 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 symbol_bc 的回复:]

引用 6 楼 wujinjian2008n 的回复:
在.net区给你回答了


收到了,因为感觉这版人气不怎么高
[/Quote]

哈哈...我也是这么感觉
symbol_bc 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wujinjian2008n 的回复:]
在.net区给你回答了
[/Quote]

收到了,因为感觉这版人气不怎么高
symbol_bc 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 cloudgamer 的回复:]
setInterval
[/Quote]

这是我想到了最后的方法了,还有没有高级一点的呢?
cloudgamer 2010-04-23
  • 打赏
  • 举报
回复
setInterval
zhangshaolongjj 2010-04-23
  • 打赏
  • 举报
回复
朋友, 你看看是不是写错了,丢了TY onpropertychange,
wujinjian2008n 2010-04-23
  • 打赏
  • 举报
回复
在.net区给你回答了
symbol_bc 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ailin84 的回复:]
纯支持。。。

是我的话两种思路:

1.写一个方法,专门执行document.getElementById("panel").innerHTML = "sdfsd";并检查改变

2.setInterVal()...
[/Quote]

兄弟,你说的很对啊,可是我现在是做html编辑器,这个情况比较多,比如
1.我可以用代码的方式document.getElementById("panel").innerHTML = "sdfsd";来做
2.document.execCommand()来用html命令来做。
3.因为页面可编辑,用户可直接用键盘操作。
哎!!!
symbol_bc 2010-04-23
  • 打赏
  • 举报
回复
谁回答一下我的问题,好像没有什么直接的办法!!
ailin84 2010-04-23
  • 打赏
  • 举报
回复
纯支持。。。

是我的话两种思路:

1.写一个方法,专门执行document.getElementById("panel").innerHTML = "sdfsd";并检查改变

2.setInterVal()...
symbol_bc 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hunter0912 的回复:]
纯支持,我在尝试自动提交ext的htmleditor的时候遇到类似的问题,还不会解决
[/Quote]

原来是同路人,我也在做htmleditor,呵呵
hunter0912 2010-04-23
  • 打赏
  • 举报
回复
纯支持,我在尝试自动提交ext的htmleditor的时候遇到类似的问题,还不会解决
ldongwei 2010-04-23
  • 打赏
  • 举报
回复
学习啦
gdfloyd 2010-04-23
  • 打赏
  • 举报
回复
顶楼上~~~
eduyu 2010-04-23
  • 打赏
  • 举报
回复
目前DOM的标准没有暴露出这样一个接口,个人感觉,楼上的重载innerHTML的方式,要比setInterval好,最好还是修改下设计或者算法,这个需求还是有点怪。

87,997

社区成员

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

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