1

Twitter の 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))
  }

そして、これはすべてのブラウザーで正常に機能します。いくつかの検索の後、他の誰かが同じ問題に直面していることがわかりました。特にリンクの引数を読んだ後、このバグを修正するより良い方法があるかどうかはわかりません。

IE9 では、ドキュメントにネイティブの contains() 実装があるため、jQuery はそれを使用します。問題は、この contains() 実装が SVG 要素に拡張されないことです。

私の修正を改善できるかどうかについて何か提案はありますか?

4

1 に答える 1

2

いくつかの提案があるかもしれませんが、最良の方法は、ブートストラップgithubにアクセスしてプルリクエストを実行することです。@ fatと@mdoは、コードをマージする前にそれを確認し、フィードバックを提供します。乾杯!

于 2012-06-21T23:30:57.860 に答える