【问题标题】:What's the best way to stop a click event propagating in IE9 beta?阻止在 IE9 beta 中传播的点击事件的最佳方法是什么?
【发布时间】:2011-06-21 08:09:29
【问题描述】:

dojo.stopEvent 似乎不再停止 IE9 中单击事件(或提交事件)的默认操作。事件处理如何从 IE8 更改为 IE9?在 IE9 中停止事件的最佳方法是什么? event.preventDefault() 似乎也没有阻止点击事件的发生。

【问题讨论】:

  • 看起来 dojo 在 IE9 上强制使用 IE5-8 解决方案... UA 嗅探 R 不好。试试:e.cancelBubble = true;或者确实返回 false;

标签: javascript internet-explorer dom dojo dom-events


【解决方案1】:

这应该从 Dojo 1.6 RC1 开始解决。试试看吧。

http://download.dojotoolkit.org/release-1.6.0rc1/

http://bugs.dojotoolkit.org/ticket/12257

【讨论】:

  • 很好,我很高兴这个问题得到了解决,并且很好地采取了主动行动。然而,快速浏览一下补丁就会发现,新代码没有使用特征检测,而是添加了更多基于用户代理的嗅探来应对 IE9。为什么不重做它以使用特征检测呢?这样,您最终会得到更多可维护的代码,下次新浏览器出现时无需更改这些代码。显然,如果代码一开始就以这种方式编写,则不需要进行此更改,但我想这不是您的错。
  • 我已经在我对您的回答的评论中解释了这一点 - 功能检测是 Dojo 确实计划采用的路线,但不是在 1.6 中 - 这肯定不是一个可以在一周内实现全面的改变在发布之前。是的,此处应用的修复目前“延续”了 UA 检查的困境,但它是影响较小的更改修复问题而不影响其他任何内容。
  • 我想知道像 Dojo 这样的库的意义是什么,如果您可以预期使用它的任何代码在每次发布新浏览器时都会中断,尤其是当该浏览器的预览版本已公开可用时完整发布前的一整年。
【解决方案2】:

听起来 Dojo 是浏览器嗅探并提供基于用户代理字符串的事件处理代码的仅 IE 实现,快速查看源代码表明情况也是如此。对于一个应该使用特征检测的通用库来说,这是不好的行为,尤其是因为在这种情况下特征检测非常容易。

我的建议:放弃 Dojo,如果它太无能而无法处理这个问题。

【讨论】:

  • Dojo 确实计划在未来访问特征检测路线(显然不会在 1.6 中实现),但是是的,这已成为 IE9 即将出现的一个已知问题。 OTOH,目前有哪些流行的库依赖于 UA?
  • @Ken:我不完全确定。我的印象是 jQuery 在 1.3 左右在这方面做了很大的改进,但我最近没有检查。
  • @Ken:另外,我想知道 Dojo 开发人员到底在做什么。第一个 IE 9 预览版于 10 多个月前的 2010 年 3 月发布。对我来说似乎有足够的时间在 IE 9 中测试他们的库。
  • 公平的问题(如果措辞不公平),我也有点想知道。 dojo 团队有意识地决定不测试 IE9 的早期预览版,显然是有充分理由的,因为我在 3 个月前发现的其中一个 bug 已在最近的平台预览版中得到解决。瞄准移动目标毫无意义,但现在 RC 即将问世,计划对其进行调查。
  • @Ken:公平地说,对 Dojo 开发人员而言,我同意为初始预览编写代码会很鲁莽。然而,即使是 2010 年 3 月的第一个 IE 9 预览版也支持addEventListener(),因为它有一个稳定的规范和几个浏览器实现,所以他们有足够的时间看到这个特殊问题的到来。如果您考虑到 Dojo 大约 18 个月前有特征检测爱好者 David Mark 提出这些观点并在核心中修复它们,那就更久了。
猜你喜欢
  • 2014-10-20
  • 1970-01-01
  • 2019-09-29
  • 2017-05-16
  • 1970-01-01
  • 2021-09-04
  • 1970-01-01
  • 2013-03-25
  • 1970-01-01
相关资源
最近更新 更多