1

私のjsファイルの1つに次のコードがあります

$('#elementID').hoverIntent({
    over: function() {//function#1 body},
    out: function() {// function#2 body}
});

そして、私のjsファイルの別の1つで、hoverIntentに別のメソッドを追加したいと思います。ただし、新しいバインディングは前のバインディングを上書きし、新しいバインディングのみが実行されます。

$('#elementID').hoverIntent({
    over: function() {//function#3 body}
});

そのため、関数#1と関数#3の両方をホバーで実行する必要があります。

それはhoverIntentでも可能ですか?

そうでない場合は、私がそれを行うことができるように、私を別の方向に向けてください。

注:最初のファイルを変更する権限がありません。ホバーに機能を追加したいだけです。

ありがとうございました。

4

3 に答える 3

1

これは古い質問ですが、検索で出てきたので、他の誰かがそれに遭遇した場合に備えて、ここに私の答えを差し込んでいます。

hoverIntentプラグインは複数のコールバックを処理することを意図していないので、そのバージョンにパッチを適用しました。クロスブラウザの互換性については完全にはテストされていませんが、すべてがjQueryのAPIを介して行われるため、問題はないはずです。

Githubリンク

于 2012-10-31T13:06:03.617 に答える
0

hoverIntentプラグインが複数のイベントハンドラーをサポートするように設定されていないように見えます。これを機能させるには、おそらくhoverIntentコードにパッチを適用する必要があります。

于 2011-04-01T22:11:19.447 に答える
0

1つの方法は、プラグインを変更して、hoverIntent構成変数、cfgがパブリックになるようにすることです。プラグインの行の後cfg = $.extend(cfg, g ? { over: f, out: g } : f );に、次を追加します。

cfg = $.extend(cfg, g ? { over: f, out: g } : f );
$.fn.hoverIntent.cfg = cfg;

次に、これを行うことができます:

$("#elementID").hoverIntent({
    over:   function(){ $(this).val("over"); },
    out:    function(){ $(this).val("out"); }
});

var cfg = $("#elementID").hoverIntent.cfg;
$.extend(cfg, { over: function(){ $(this).val("new over"); } });
$("#elementID").hoverIntent(cfg);

これは理想的ではありませんが、プラグインを変更し、構成変数を拡張し、を再初期化せずにこれを行う別の方法がわかりません#elementID

更新1:

私は以前、OPの要求を誤解していました。彼は関数#1と#3を必要としましたが、#2を起動する必要はありませんでした。

$("#elementID").hoverIntent({
    over:   function(){ //function #1 },
    out:    function(){ //function #2 }
});

var cfg = $("#elementID").hoverIntent.cfg;
var oldOver = cfg.over; // function #1

$.extend(cfg, { 
    out: false,
    over: function(){
    oldOver(); // call oldOver aka function #1 above
    // function #3
}});
$("#elementID").hoverIntent(cfg);

更新2:

上記の私の解決策は、グローバル変数を作成するだけなので機能しません。グローバル変数cfgは、の追加の使用によって変更されます$.hoverIntent

$.data()代わりにメソッドを使用して、別の方法を使用します。

プラグインの行の後cfg = $.extend(cfg, g ? { over: f, out: g } : f );に、次を追加します。

cfg = $.extend(cfg, g ? { over: f, out: g } : f );
$(this).data('cfg', cfg);

それで:

$("#elementID").hoverIntent({
    over:   function(){ //function #1 },
    out:    function(){ //function #2 }
});

var cfg = $("#elementID").data('cfg');
var oldOver = cfg.over; // function #1

$.extend(cfg, { 
    out: false,
    over: function(){
    oldOver(); // call oldOver aka function #1 above
    // function #3
}});
$("#elementID").hoverIntent(cfg);
于 2011-04-01T22:11:44.017 に答える