【问题标题】:two onClick() events happening simultaneously?两个 onClick() 事件同时发生?
【发布时间】:2013-07-18 21:39:40
【问题描述】:

我对代码的期望是: 单击按钮时,在指针位置会出现一个选项菜单。任何后续单击,无论是在菜单项上还是在浏览器的其他位置上,都应该关闭菜单。单击菜单项会关闭菜单,但不会单击其他任何位置。当我取消注释$(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();
            });*/
        }

提前感谢您的帮助。

【问题讨论】:

    标签: javascript jquery css backbone.js


    【解决方案1】:

    如果你延迟绑定到文档 10 毫秒,这应该是足够的时间让事件传播到正文,以便它不会立即关闭菜单,然后在菜单上的下一次单击将导致正文单击处理程序触发。

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

    你不能使用停止传播或类似的东西,因为这也会停止菜单上的第二次点击。

    【讨论】:

      【解决方案2】:

      虽然延迟第二个事件绑定可能会在 99.999% 的情况下起作用,但我不禁会觉得有一次在唠叨“如果”的话,有些事情会滞后并且不起作用。

      This question 提供了一个更令人满意(至少对我而言)的解决方案

      【讨论】:

        猜你喜欢
        • 2016-05-08
        • 2014-07-27
        • 1970-01-01
        • 2011-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多