Javascript 在mousedown元素之外捕获mouseup的最佳方法

Javascript 在mousedown元素之外捕获mouseup的最佳方法,javascript,jquery,mouseevent,mouseup,Javascript,Jquery,Mouseevent,Mouseup,我试图从元素内部或外部释放的mousedown捕获mouseup事件。这段代码几乎可以正常工作,但问题是unbind('mouseup')正在解除与mouseup事件(jqueryui)关联的其他脚本的绑定。如果未设置unbind(),则代码将在mouseup事件中堆叠并调用x次,其中x是鼠标拥有的次数 路线1:是否有某种自毁功能,只调用一次就可以摧毁 路径2:在插入代码之前,有没有办法复制/克隆mouseup函数,然后解除绑定,然后设置为previous 理想情况下,我希望保持此代码结构整洁,

我试图从元素内部或外部释放的mousedown捕获mouseup事件。这段代码几乎可以正常工作,但问题是unbind('mouseup')正在解除与mouseup事件(jqueryui)关联的其他脚本的绑定。如果未设置unbind(),则代码将在mouseup事件中堆叠并调用x次,其中x是鼠标拥有的次数

路线1:是否有某种自毁功能,只调用一次就可以摧毁

路径2:在插入代码之前,有没有办法复制/克隆mouseup函数,然后解除绑定,然后设置为previous

理想情况下,我希望保持此代码结构整洁,因为我有很多可单击的元素,因此将document.mouseup绑定到element.mousedown之外会很混乱


这是我忘记添加的小提琴

我创建了一个全局对象来捕获文档中的鼠标事件。它目前只为mouseup设置,但可以轻松地为其他用户扩展。mouseup代码仍然可以在clickable元素的mousedown函数中自定义,因此,如果您有很多像我这样的可单击的东西,它就非常方便了

$('#clickableElement').bind({
    mousedown: function(e)
    {
        console.log('mousedown on element');

        $(document).bind('mouseup',function(e){
            console.log('mouseup caught');

            //Do some magic here 

            $(this).unbind('mouseup');
        });

    },
    mouseup:function(e)
    {
        //mouseup within element, no use here.
    }
});

我创建了一个全局对象来捕获文档中的鼠标事件。它目前只为mouseup设置,但可以轻松地为其他用户扩展。mouseup代码仍然可以在clickable元素的mousedown函数中自定义,因此,如果您有很多像我这样的可单击的东西,它就非常方便了

$('#clickableElement').bind({
    mousedown: function(e)
    {
        console.log('mousedown on element');

        $(document).bind('mouseup',function(e){
            console.log('mouseup caught');

            //Do some magic here 

            $(this).unbind('mouseup');
        });

    },
    mouseup:function(e)
    {
        //mouseup within element, no use here.
    }
});
如果“开启”事件是可能的,那么它可能不是一个精确的解决方案。请参考此代码

    var MouseCatcher=function()
    {
        this.init=function()
        {
            var mc = this; 
            $(document).bind({
                mouseup:function(e) 
                {
                    mc.mouseup();
                }
            });
        }
        this.mouseup=function()
        {
            return false;
        }
    }
    var mouseCatcher = new MouseCatcher();
    mouseCatcher.init();



    $('#clickableElement').bind({
        mousedown: function(e)
        {
            console.log('mousedown on element');

            mouseCatcher.mouseup=function()
            {
                console.log('mouseup called from MouseCatcher');
                this.mouseup = function(){return false;}
            }

        },
        mouseup:function(e)
        {
            //mouseup within element, no use here.
        }
    });
如果有“on”事件,则可能不是精确的解决方案。请参考此代码

    var MouseCatcher=function()
    {
        this.init=function()
        {
            var mc = this; 
            $(document).bind({
                mouseup:function(e) 
                {
                    mc.mouseup();
                }
            });
        }
        this.mouseup=function()
        {
            return false;
        }
    }
    var mouseCatcher = new MouseCatcher();
    mouseCatcher.init();



    $('#clickableElement').bind({
        mousedown: function(e)
        {
            console.log('mousedown on element');

            mouseCatcher.mouseup=function()
            {
                console.log('mouseup called from MouseCatcher');
                this.mouseup = function(){return false;}
            }

        },
        mouseup:function(e)
        {
            //mouseup within element, no use here.
        }
    });

可以为您的
单击
事件提供一个名称空间,以便仅解除名称空间事件的绑定,而不解除任何其他事件的绑定

    $(document).on('mousedown', function() {
        $('#clickableElement').css('display', 'none');
        $(document).bind('mouseup', function() {
             $('#clickableElement').css('display', 'block');
        });
    });

是否可以为
事件指定一个命名空间,以便仅解除该命名空间事件的绑定,而不解除任何其他事件的绑定

    $(document).on('mousedown', function() {
        $('#clickableElement').css('display', 'none');
        $(document).bind('mouseup', function() {
             $('#clickableElement').css('display', 'block');
        });
    });

那不行。您已将mousedown事件绑定到整个文档中。我认为这对我们很有用。
$('clickableElement')。on('mousedown',function(){$('clickableElement')。css('display','none');$(document)。bind('mouseup',function(){$('clickableElement')).css('display','block');})那不行。您已将mousedown事件绑定到整个文档中。我认为这对我们很有用。
$('clickableElement')。on('mousedown',function(){$('clickableElement')。css('display','none');$(document)。bind('mouseup',function(){$('clickableElement')).css('display','block');})这实际上是一个非常好的解决方案!非常感谢。我不知道有人可以像那样向事件添加名称空间。类似地,可以触发名称空间事件,这样其他人就不会触发。这实际上是一个很好的解决方案!非常感谢。我不知道有人可以像那样向事件添加名称空间。类似地,可以触发名称空间事件,这样其他人就不会触发