我遇到了一段遗留的YUI3插件代码,试图将自己注入到基于事件的流中。基本上,代码将订阅一个事件X,并在处理程序中执行如下操作:
if (!this._hasDoneStuff) {
doStuff();
event.preventDefault();
fire("theEvent", newEvent);
}
preventDefault()调用似乎不起作用;事件继续正常进行。我成功地用一个小例子复制了这个例子:
var eidCounter = 0;
this.publish("myEvent", {
defaultFn: function (myEvent) {
console.log("default function hit by event " + myEvent.eid);
},
context: this
});
this.on("myEvent", function (myEvent) {
console.log("saw & prevented " + myEvent.eid);
myEvent.preventDefault();
if (myEvent.eid < 3) {
this.fire("myEvent", { eid: eidCounter++ });
} else {
console.log("stopped " + mikeEvent.eid);
}
}, this);
this.fire("myEvent", { eid: eidCounter++ });
我希望这永远不会运行默认函数,因为preventDefault()
总是被调用的。然而,实际产出是:
锯防0 锯和防止1 锯和防2 锯防3 停止3 事件2命中的默认函数 事件1命中的默认函数 事件0命中的默认函数
因此,preventDefault()
似乎只处理堆栈中的最后一个事件。这似乎是一个bug,但我是否真的违反了事件API的某些部分?有解决办法吗?
发布于 2013-11-20 18:24:24
不幸的是,姚一直都是这样工作的。尽管从订阅中触发订阅事件似乎很奇怪,但它确实看起来像是一个bug。您可以在这里存档:https://github.com/yui/yui3/issues
https://stackoverflow.com/questions/20083519
复制相似问题