我正在尝试为 DOM 更改事件添加一个侦听器。我希望像 'dom:loaded' 这样简单的东西被烘焙到 Prototype 中。我不确定处理这个问题的“原型方式”。
编辑:我无法控制可能更改 DOM 的每种情况,因此我无法在每次 DOM 更改时触发自定义事件。
我正在尝试为 DOM 更改事件添加一个侦听器。我希望像 'dom:loaded' 这样简单的东西被烘焙到 Prototype 中。我不确定处理这个问题的“原型方式”。
编辑:我无法控制可能更改 DOM 的每种情况,因此我无法在每次 DOM 更改时触发自定义事件。
没有标准的处理程序来观察这个。但是,您可以在 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% 通用,但它应该让你开始。
我建议您从原型文档中查看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)
);
我应该指出,显然文档还有一个观察功能,专门用于监听整个文档上的事件,例如 dom:loaded。
我认为这里是合适的答案:JavaScript 可以在每个 Dom 元素上侦听“onDomChange”吗?. 查看 DOMSubtreeModified、DOMNodeInserted 等。
$(element).observe('click', function(event) { someFunction(event); } ); //someFunction 将在点击事件上被调用。这可以更改为任何其他事件。
去元素看更多。