有人可以评论我的错误修复吗?

时间:2012-06-21 22:36:32

标签: jquery internet-explorer svg cross-browser twitter-bootstrap

我一直在使用Twitter's Bootstrap Tooltip plugin。除了在svg元素上使用它时,它会完全正常工作。经过一些调试,我缩小了问题范围。在js文件中,init函数如下所示:

  , init: function (type, element, options) {
      var eventIn
        , eventOut

      ...

      if (this.options.trigger != 'manual') {
        eventIn  = this.options.trigger == 'hover' ? 'mouseenter' : 'focus'
        eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur'
        this.$element.on(eventIn, this.options.selector, $.proxy(this.enter, this))
        this.$element.on(eventOut, this.options.selector, $.proxy(this.leave, this))
      }

      ...

    }

我记得SVG-IE 9.0的具体实现存在很多问题,所以我做了以下修改:

  if (this.options.trigger != 'manual') {
    eventIn  = this.options.trigger == 'hover' ? 'mouseenter' : 'focus'
    eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur'
    var flag = $.browser.msie  && parseInt($.browser.version, 10) === 9
    eventIn = flag ? "mouseover" : eventIn
    eventOut = flag ? "mouseout" : eventOut

    this.$element.on(eventIn, this.options.selector, $.proxy(this.enter, this))
    this.$element.on(eventOut, this.options.selector, $.proxy(this.leave, this))
  }

这适用于所有浏览器。经过一番搜索,我发现someone else遇到了同样的问题。我不确定是否有更好的方法来修复这个bug,尤其是在阅读link中的参数之后。

  

在IE9中,文档上有一个本机contains()实现,   所以jQuery使用它。问题是这包含()实现   不扩展到SVG元素。

有关我的修复是否可以改进的任何建议?

1 个答案:

答案 0 :(得分:2)

好吧,我可能会有一些建议,但最好的办法是继续bootstrap github并执行拉取请求,@ fat和@mdo肯定会在合并你的代码之前先看看它,甚至给出你的反馈。干杯!