2

私のコードに期待しているのは次のとおりです。ボタンをクリックすると、ポインターの位置にオプションのメニューが表示されます。その後のクリックは、メニュー項目であろうとブラウザの他の場所であろうと、メニューを閉じる必要があります。メニュー項目をクリックするとメニューが閉じますが、他の場所をクリックすることはできません。コメントを外す$(document.body).one('click', function() {menu.remove()}と、そもそもメニューが表示されず、クリックしてメニューを表示すると実際にメニューも閉じるように配置されているのではないかと思います。コードは次のとおりです。

render : function() {
            this.$el.html(this.template(this.model.toJSON()));
            var that = this;
            if (this.model.attributes.memberType != 'OWNER') {

                this.$('.memberTypeSelector').button({
                    icons : {
                        secondary : "ui-icon-triangle-1-s"
                    }
                }).click(function(event) {
                    that.showPermissions(that.model, event, that);
                });
            ...
},

showPermissions : function(member, event, view) {
            var levels = ['ADMIN', 'CONTRIBUTOR', 'VIEWER'];
            var menu = $('<ul>');
            $.each(levels, function() {
                if(member.attributes.memberType !== this) {
                    var item = $('<li>').appendTo(menu);
                    $('<a>').attr('href', '#').text(this).appendTo(item).click(function() {
                        menu.remove();
                        view.changePermission(member, this.text, view);
                    });
                }
            });
            menu.menu().css({
                position : 'absolute',
                left : event.clientX,
                top : event.clientY
            });
            $(document.body).append(menu);
            /*$(document.body).one('click', function() {
                menu.remove();
            });*/
        }

よろしくお願いします。

4

2 に答える 2

3

ドキュメントへのバインドを 10 ミリ秒遅らせると、イベントが本文に伝播してメニューがすぐに閉じられないようにするのに十分な時間になるはずです。メニューを次にクリックすると、本文のクリック ハンドラーがトリガーされます。

setTimeout(function(){
    $(document.body).one('click', function() {menu.remove();});
},10)

メニューの2回目のクリックも停止するため、伝播の停止などは使用できません。

于 2013-07-18T21:55:10.047 に答える
0

2 番目のイベント バインディングを遅らせると、おそらく 99.999% の確率で機能しますが、何かが遅れて機能しないという 1 回限り、「もしも」しつこく感じずにはいられません。

この質問は、より満足のいく(少なくとも私には)解決策を提供します

于 2013-07-19T15:13:31.547 に答える