0

HTMLでメニューを作成するJavaScriptオブジェクトを開発しようとしています。この関数は、オブジェクトを引数として受け取ります。オブジェクト要素の中には、オブジェクトのメソッドから呼び出されるイベント ハンドラーで実行する必要がある関数があります。

これが私のコードです:

Menu = function(config) {
    var j = 0;
    this.config = config;
    this.make = function() {
        for (i = 0; i < this.config.items.length; i++) {
            var vid = document.createElement("div");
            vid.className = this.config.cls;
            vid.id += i;
            document.body.appendChild(vid);
            var txt = document.createTextNode(this.config.items[i]);
            var pp = document.createElement("p");
            pp.appendChild(txt);
            vid.appendChild(pp);
        }

        document.addEventListener("keydown", this.scrolldown, false);
        document.onkeydown = function(e) {
            var keyCode = e.keyCode;
            alert("functional");
            if (keyCode == 40) {
                alert("You hit key down");

                var et = document.getElementById(j);
                this.config.trait1(et);
                j = j + 1;
            } else {
                alert("no");
            }

        }
    };

    return this;
};

オブジェクトをインスタンス化した後に関数 make を呼び出すと、要素が作成されましたが、次の理由でイベントが処理されません。

Uncaught TypeError: undefined のメソッド 'trait1' を呼び出せません。

誰でも私を助けることができますか?同じ質問に対する多くの回答を見ましたが、提案された解決策はどれもうまくいきませんでした。

4

1 に答える 1

4

this関数内は関数内Menuと同じではありません。thisonkeydown

thisの値を別の変数に格納して使用します。

Menu = function () {
    var myMenu = this; // I'm assuming that you will be calling `new Menu()`
    document.onkeydown = function () {
        myMenu.config.etc.etc.etc
    }
}
于 2013-07-09T11:35:58.660 に答える