1

Drupal で使用されている Superfish ライブラリは次のとおりです。102 行目の superfish.js ファイルには、次のコードが含まれています。

$.fn.extend({
    hideSuperfishUl : function(){
        /* some statements */
    },
    showSuperfishUl : function(){
        /* some statements */
    }
});

これら 2 つの関数をオーバーライドする必要があります。どうやってするの?(具体的に Drupal で行う方法ではなく、javascript で行う方法を意味します)

PSいくつかの情報に基づいて、私は自分のスクリプトにこのコードを追加しようとしました:

(function ($) {
  var orig_hideSuperfishUl = $.hideSuperfishUl;
    $.hideSuperfishUl = function(){
      alert('lol');
    }
})(jQuery);

Firebug は、ページが更新されると「var」で始まるステートメントが実行されることを示していますが、「alert」を含むステートメントは実行されません。代わりに、元の hideSuperfishUl 関数が実行されます。

[編集 1] カスタム コードを次のように変更しました。

(function ($) {
  //var orig_hideSuperfishUl = $.hideSuperfishUl;
  var hideSuperfishUl = function(){
    alert('lol');
  }
})(jQuery);

[編集 2] 4 つのブレークポイントを追加しました。

  1. コードを含む102行目のsuperfish.js$.fn.extend({
  2. コードを含む106行目のsuperfish.jso.retainPath = false;
  3. 私のスクリプトの行でvar hideSuperfishUl = function(){
  4. 私のスクリプトの行でalert('lol');

ページを更新した後、ブレークポイント 1 のコードが最初に実行され、次にブレークポイント 3 で実行されます。マウスをメニューのオンとオフに移動した後、ブレークポイント 2 のコードが実行されます。ブレークポイント 4 に達していません。

ブレークポイント 1 のコール スタックは 2 つの無名関数のみです (最初の関数は jQuery 引数を持つ最も外側の関数で、2 番目はブレークポイントです)。ブレークポイント 3 での非常によく似たコール スタック。

4

2 に答える 2

0

何をしているのか

var orig_hideSuperfishUl = $.hideSuperfishUl;

関数を新しい変数に割り当てていますが、元の変数には影響しません。

オリジナルを単純に再定義してみてください。

var hideSuperfishUl = '';

また

var hideSuperfishUl = function() {...}
于 2013-07-23T19:04:48.530 に答える