21

最近、jQuery を 1.9.0 にアップグレードしましたが、ほろ酔いプラグインが壊れてしまいました。そのlive機能によってエラーが発生するようになりました。

$('.tooltip, abbr').tipsy({
    live: true
});

TypeError: this[binder] is not a function

これに対する修正またはパッチはありますか? グーグルは何の役にも立ちませんでした。


アップデート:

答えてくれてありがとう。パッチが見つからなかったため、自分で問題を修正することにしました。

調べてみると、エラーは本当に簡単に追跡できるように見えました。onほろ酔いプラグインは、非推奨の機能の代わりに機能を使用するように簡単にパッチを適用できliveます。ほろ酔いプラグインで、次のコードを置き換えました。

if (options.trigger != 'manual') {
    var binder = options.live ? 'live' : 'bind',
        eventIn = options.trigger == 'hover' ? 'mouseenter' : 'focus',
        eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur';
    this[binder](eventIn, enter)[binder](eventOut, leave);
}

と:

if (options.trigger != 'manual') {
    var eventIn = options.trigger == 'hover' ? 'mouseenter' : 'focus',
        eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur';
    if (options.live)
        $(document).on(eventIn, this.selector, enter).on(eventOut, this.selector, leave);
    else
        this.bind(eventIn, enter).bind(eventOut, leave);
}

魅力のように機能します。:)

4

2 に答える 2

14

jquery 1.9 で削除されたjquery.livelive:true使用しているため、jquery 移行プラグインを含める必要があります。

下位互換性のために、ここからダウンロードできる移行プラグインが作成され、削除されたメソッドとユーティリティのサポートを追加する移行プラグインが含まれています。

私は次のようなことをしているでしょう

if (options.trigger != 'manual') {
    var eventIn  = options.trigger == 'hover' ? 'mouseenter' : 'focus',
        eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur';
    if(options.live){
      $(this.context).on(eventIn, this.selector, enter).on(eventOut, this.selector, leave);
    } else {
      this.on(eventIn, enter).on(eventOut, leave);
    }
}
于 2013-03-18T09:48:41.343 に答える
0

問題は、このプラグインがまだそこで使用.live()したメソッドliveを機能させるために使用していることです。このプラグインは非推奨になり、に置き換えられました.on()

プラグインの更新バージョンを検索するか、自分でプラグインを置き換えるようにしてください。

于 2013-03-18T09:53:09.003 に答える