![](/img/trans.png)
[英]Safari: SVG in <label> elements don't seem to work with “click” events
[英]YUI events don't seem to work recursively
我遇到了一段旧的 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()
似乎只对堆栈中的最后一个事件起作用。 这似乎是一个错误,但我实际上是否违反了事件 API 的某些部分? 有解决方法吗?
不幸的是,YUI 一直是这样工作的。 尽管从订阅中触发订阅事件似乎很奇怪,但它确实看起来像是一个错误。 你可以在这里归档: https : //github.com/yui/yui3/issues
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.