Javascript 在mousedown元素之外捕获mouseup的最佳方法
我试图从元素内部或外部释放的mousedown捕获mouseup事件。这段代码几乎可以正常工作,但问题是unbind('mouseup')正在解除与mouseup事件(jqueryui)关联的其他脚本的绑定。如果未设置unbind(),则代码将在mouseup事件中堆叠并调用x次,其中x是鼠标拥有的次数 路线1:是否有某种自毁功能,只调用一次就可以摧毁 路径2:在插入代码之前,有没有办法复制/克隆mouseup函数,然后解除绑定,然后设置为previous 理想情况下,我希望保持此代码结构整洁,因为我有很多可单击的元素,因此将document.mouseup绑定到element.mousedown之外会很混乱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 理想情况下,我希望保持此代码结构整洁,
这是我忘记添加的小提琴我创建了一个全局对象来捕获文档中的鼠标事件。它目前只为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');})代码>这实际上是一个非常好的解决方案!非常感谢。我不知道有人可以像那样向事件添加名称空间。类似地,可以触发名称空间事件,这样其他人就不会触发。这实际上是一个很好的解决方案!非常感谢。我不知道有人可以像那样向事件添加名称空间。类似地,可以触发名称空间事件,这样其他人就不会触发