我正在尝试为DOM更改事件添加侦听器。我希望像'dom:loaded'这样简单的东西被刻入Prototype。我不确定处理这个问题的'Prototype-way'。
编辑:我无法控制DOM可能被更改的每个案例,所以我无法在每次更改DOM时触发自定义事件。
答案 0 :(得分:3)
没有标准的处理程序可以观察到这一点。但是,您可以在Prototype中触发自定义事件。结合Function.wrap,您应该能够完全满足您的需求。
基本上,你可以使用任何可以修改DOM的函数,比如Element.insert(),并用一个触发你的change事件的函数包装它:
Element.prototype.insert = Element.prototype.insert.wrap(
function(original) {
var ret = original.call(this, $A(arguments).slice(1));
document.fire('dom:changed');
}.bind(this)
);
现在,无论何时调用Element.insert,它都会触发'dom:changed',可以使用Event.observe()进行观察。
我无法保证我刚才写的是100%完美,也不是100%多才多艺,但它应该让你开始。
答案 1 :(得分:1)
我建议您从原型文档中查看Event.observe的文档。
使用dom:loaded
作为示例document.observe("dom:loaded", function() {
// Some Javascript Code
});
Event.observe的一个例子
$('step_anchor_' + i).observe('click', function(a, b){
return function(){pm.loadData(a, b, true)};
}(profile.steps[i].action, profile.steps[i].dao_id)
);
我应该指出,显然document还有一个observe函数,专门用于侦听整个文档中的事件,例如dom:loaded。
答案 2 :(得分:0)
$(element).observe('click',function(event){someFunction(event);}); //将在click事件上调用someFunction。这可以更改为任何其他事件。
转到Element以查看更多内容。
答案 3 :(得分:0)
我认为这是恰当的答案:Can javascript listen for "onDomChange" on every Dom elements?。 查看DOMSubtreeModified,DOMNodeInserted等。