0

私は、オペレーティング システムと非常によく似たこのメニュー システムに取り組んでいます。jqueryなどを利用。

For ループに 2 つのコメントがあります。基本的に、 $(document).on('click')... 関数で最後のインデックスをそれぞれ出力しています。しかし、document.on の外では問題なく動作します。

それはおそらく明らかな問題ですが、これに約1時間費やしました..事前に感謝します!

    menu: function(title) {
        this.title = title;
        this.slug = slugify(title);
        this.icon = false;
        this.buttons = Object();
        this.num_buttons = 0;
        this.visible = false;
        this.timeout_id = null;
        this.is_hovering_dropdown = false;
        this.is_hovering_menu = false;


        this.render = function() {
            var that = this;
            var slug = that.slug;
            var str = '<li id="menu-' +slug +'"><a href="#" id="menu-toggle-' +slug + '">' + this.title + '</a>';

            if (this.num_buttons > 0) {
                str += '<ul id="menu-dropdown-' + slug + '" style="display: none;" class="dropdown">';
                for (var button in this.buttons) {

                    str += '<li><a href="#" id="menu-dropdown-' + slug + '-' +that.buttons[button]['slug'] +'">' +that.buttons[button]['title'] +'</a></li>'

                    alert(button) //new project, open project, save as etc.
                    $(document).on("click", "#menu-dropdown-" +slug + '-' + that.buttons[button]['slug'], function() {
                        $("#menu-dropdown-" + slug).hide("fade", 200);
                        that.visible = false;

                        alert(button);//save as, save as, save as, save as etc.
                    });
                }
            }
        }
    }
4

1 に答える 1

1

どうぞ:

操作の順序とスコープのおかげで、すべてのボタンは のLAST値への参照とともに保存されますbutton

あなたがしたいことは、その割り当てをすぐに呼び出す関数の中に入れ、ボタンをその特定の関数スコープに渡すことです。

(関数 (ボタン) { $(ドキュメント). //...... }(ボタン));

即時関数内のすべてのものは、即時関数のスコープ外の静的なもの (つまり: that) に引き続きアクセスできる必要があります。また、その場で呼び出されるため、現在の値への参照も持ちますbutton

ストーリーのより長いバージョンは、ボタンが作成されるときに、のではなく、への参照が与えられるため、後で実際に呼び出されると、現在存在するボタンの値を参照することです。 (つまり、ループで最後に割り当てられた値)。buttonbutton

于 2012-07-25T21:47:47.400 に答える