0

OOP javascript と jQuery を学習する方法として、動的ドロップダウン メニューのスクリプトを作成しようとしています。www.industrialMerchants.com/industrialMerchantsでダミー サイトを確認できます。スクリプトは、www.industrialMerchants.com/industrialMerchants/javascript/horizo​​ntalDropMenu2.jsにあります。

このスクリプトは、最初にいくつかのオブジェクトを定義します。その後、$(document).ready()関連する jQuery オブジェクトと DOM 要素をオブジェクト モデルにラップするプロセスを開始するように設計されたクロージャーを使用します。

問題は、ダミー Web サイトとして機能する静的 html ドキュメントをロードすると、Firebug が次のエラーを表示することです。

"TypeError: jqObject is undefined."

エラーは、次の関数の 5 行目を指しています。

function Menu(jqObject) {
    self = this;
    this.self = jqObject;
    this.submenus = (function(){
        jqObject.children().children("ul").each(function() { <<--- Error
            submenu = new Submenu($(this), self);
            submenus.push(submenu);
            return submenus;
        });
    }());
}

関数を呼び出す行は次のとおりです。

$(document).ready(function(){ 
     menus = new Array();
     $("ul.horizontalDropMenu").each(function(){
         menu = new Menu($(this));
         menus.push(menu);
     });
 });

ご覧のとおり、Menu()オブジェクト コンストラクターの呼び出しには引数として jQuery オブジェクトへの参照が含まれているため、jqObjectIS が明確に定義されています。それで、何が得られますか?

宣言で始まるコードにブレークポイントを挿入する$(document).ready()と、実行はそれを完全にスキップし、関数宣言自体から開始します。あたかもブラウザが明示的な呼び出しが行われる前に関数宣言を実行しようとしているかのようです。

4

1 に答える 1

3

ブレークポイントを設定してコール スタックを上に移動すると、次の行が表示されます (外部.ready- しかし、それは問題ではありません)。

Submenu.prototype = new Menu();

jQuery オブジェクトを使用せずにメニュー インスタンスを作成していますundefined

于 2012-08-22T22:24:14.703 に答える