2

我正在尝试为 DOM 更改事件添加一个侦听器。我希望像 'dom:loaded' 这样简单的东西被烘焙到 Prototype 中。我不确定处理这个问题的“原型方式”。

编辑:我无法控制可能更改 DOM 的每种情况,因此我无法在每次 DOM 更改时触发自定义事件。

4

4 回答 4

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% 通用,但它应该让你开始。

于 2009-01-16T19:46:04.490 回答
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)
                   );

我应该指出,显然文档还有一个观察功能,专门用于监听整个文档上的事件,例如 dom:loaded。

于 2009-01-16T19:29:32.450 回答
0

我认为这里是合适的答案:JavaScript 可以在每个 Dom 元素上侦听“onDomChange”吗?. 查看 DOMSubtreeModified、DOMNodeInserted 等。

于 2011-04-07T19:39:47.497 回答
0

$(element).observe('click', function(event) { someFunction(event); } ); //someFunction 将在点击事件上被调用。这可以更改为任何其他事件。

http://prototypejs.org/api

去元素看更多。

于 2009-01-16T20:42:35.437 回答