1

这是Drupal 中使用的 Superfish 库。第 102 行的 superfish.js 文件包含代码:

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

我需要重写这两个函数。怎么做?(我不是指如何在 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.js 中,带有代码o.retainPath = false;
  3. 在我的脚本中var hideSuperfishUl = function(){
  4. 在我的脚本中alert('lol');

刷新页面后,首先运行断点 1 处的代码,然后运行断点 3 处的代码。鼠标上下移动菜单后,断点 2 处的代码运行。未达到断点 4。

断点 1 处的调用堆栈只有两个匿名函数(第一个是带有 jQ​​uery 参数的最外层函数,第二个是断点)。断点 3 处的调用堆栈非常相似。

4

2 回答 2

1

有效覆盖相关函数的代码是:

$.fn.hideSuperfishUl = function(){(...)}
于 2013-08-01T19:43:48.770 回答
0

你在做什么

var orig_hideSuperfishUl = $.hideSuperfishUl;

正在将函数分配给一个新变量,这不会影响原始变量。

尝试简单地重新定义原来的:

var hideSuperfishUl = '';

或者

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