事件侦听器不会在IE中被调用 - 这是怎么回事
Event listeners won't be called in IE -- what's wrong here?
技术上下文:
- 道场 1.8.1
- dgrid 0.3.4-pre
- IE 10.0.9200
简短版本:
我也有一些道场/活动(从_WidgetBase开始),但它们有时会被召唤,有时不会被召唤。 dgrid,分页和IE是混合的。可能是什么问题?
详:
我在 dgrid 网格中遇到了这种奇怪的情况,尽管我尝试了很多,但我无法隔离问题的实际原因。我会尽可能彻底,但请随时询问更多信息。
我有一个使用分页的 dgrid 组件和一个组合框,其中包含一些我将根据这些值进行过滤。这几乎就是它的设置方式(简化,实际代码引用其他模块,并且具有更加模块化的东西):
// GridContainerWidget
var CustomGrid = declare([Grid, CompoundColumns, Selection, Keyboard, Pagination], {
selectionMode: "single",
rowsPerPage: 20
});
var grid = new CustomGrid({
deselectOnRefresh: false
}, domContainer);
网格稍后将绑定到 JsonStore。
我的筛选器按以下方式设置:
// SearchBarWidget
// inside a custom widget, inheriting from _WidgetBase
var self = this;
var statusCombo = new ComboBox({
store: new Memory(/* data and labels */),
onChange: function (selection) {
self.emit("status_changed", self.getSomeData());
}
}, comboDomContainer);
回到封装过滤器和网格的小部件:
// GenericListWidget, contains both the SearchBarWidget and the GridContainerWidget
var self = this;
this._searchToolbar.on("status_changed", function (data) {
// ... some "calibrations" ...
self._grid.set("query", { newCriteria: "something" });
});
这就是它变得奇怪的地方:
有时在IE中会调用
emit("status_changed")
,但不会调用回调on("status_changed")
。其他时候,将调用 emit,并且也会调用回调(预期)。- 这以某种方式与分页或网格刷新有关,但我无法隔离重现问题的完全相同的步骤
在深入研究这一点时,我看到IE达到了它执行以下内容的地步:(dojo/on,第314至322行)
var nativeEvent = target.ownerDocument.createEvent("HTMLEvents"); nativeEvent.initEvent(type /* "status_changed" */, !!event.bubbles /* true */, !!event.cancelable /* true */); // ... copies properties ... return target.dispatchEvent(nativeEvent) && nativeEvent; // returns true
我验证了挂机的
remove()
调用从未被调用- 我验证了触发和侦听事件的 DOM 元素实际上每次都是相同的
问题是:如何找到潜在的问题并确保每次都调用我的 on() 回调?
您遇到了在 dgrid 0.3.7 中修复的 https://github.com/SitePen/dgrid/issues/379。 若要解决与分页扩展中的分页控件相关的问题,需要更新 dgrid 版本或自行应用变更集。
这是由于IE9和IE10中存在的一个相当荒谬和烦人的IE错误(在IE11中修复):
- https://connect.microsoft.com/IE/feedback/details/799780/ie10-addeventlistener-function-is-fired-by-a-different-event
- https://connect.microsoft.com/IE/feedback/details/802397/ie9-ie10-events-can-be-sent-to-the-wrong-listeners
相关文章:
- Javascript袖珍参考,第121页:这是怎么回事;猴子补丁”;方法应该有效
- 基本的HTML Javascript程序.这是怎么回事
- 每次运行此代码时,我都会得到不同的结果,这是怎么回事
- jQuery extend 函数是怎么回事
- “Bada” - 这个JavaScript片段是怎么回事
- 如何使文本字段为空?这是怎么回事
- 自定义SVG签名在CODEPEN上有效,但在本地机器上无效-这是怎么回事
- 事件侦听器不会在IE中被调用 - 这是怎么回事
- HTML 中的空脚本标签是怎么回事
- 这个JavaScript片段是怎么回事
- 调用堆栈超出,甚至没有任何递归.这是怎么回事
- 带有奇怪输出的单行 - 字符串作为“这个”是怎么回事
- 这个速记运算符是怎么回事
- 网站似乎在没有向服务器发送密码的情况下登录用户;这是怎么回事
- 将多个值分配给一个变量.这是怎么回事
- 图片库的图片预装器?这是怎么回事
- 这个CSS渲染阻塞是怎么回事
- Javascript中的回调真的是方法调用吗?如果是的话,他们是怎么回事'级联'
- 有人能解释一下这部分是怎么回事吗
- 私有JS函数,这是怎么回事