2011-11-17 45 views
0

我有一个div包含一些span按钮水平显示。有太多的按钮适合在屏幕上,所以我希望用户能够点击并拖动整行按钮。但是,如果行已被拖动,我不希望该按钮的mouseup事件触发。jquery防止mouseup如果mousemove以前被称为

holder只包含button元素。以下是ASCII码表示:

------------------------------- 
| btn | btn | btn | btn | btn | 
------------------------------- 

以下是代码设置。目前,该按钮上的mouseup处理程序在持有者处理程序之前被调用(处理程序在冒泡阶段被调用),因此在持有者的mouseup处理程序中调用event.preventPropagation()没有任何帮助。

<div id="holder"> 
    <span class="button"></span> 
</div> 

$('#holder').mousedown(function() { 
    $(document).mousemove(function() { 
     // scroll content of #holder 
    }).mouseup(function() { 
     // stop scrolling 
     $(document).unbind('mouseup').unbind('mousemove'); 
    }); 
}); 

$('.button').mouseup(function() { 
    $('document').mousemove(function() { 
     // do some action here, but only if holder hasn't scrolled on mousedown 
    }); 
}); 

任何想法?

回答

0

为什么不直接使用一个全局变量来控制流量,这样的事情:

var scrolled = false; 

$('#holder').mousedown(function() { 
    $(document).mousemove(function() { 
     scrolled = true; 
     // scroll content of #holder 

    }).mouseup(function() { 
     // stop scrolling 
     $(document).unbind('mouseup').unbind('mousemove'); 
    }); 
}); 

$('.button').mouseup(function() { 
    $('document').mousemove(function() { 
     if (scrolled == false) { 
      // do some action here, but only if holder hasn't scrolled on mousedown 
     } 
    }); 
}); 
+0

我认为有可能是一个更优雅的解决方案:)我当然会必须设置'滚动= FALSE'在文档mouseup处理程序... – Tim