如何用光标拖动来防止文本/元素select

我做了一个分页控制,我注意到,点击button时,很容易意外地select单个图像和文本。 有没有可能防止这种情况?

澄清select我的意思是用鼠标突出显示。 (尝试将鼠标从屏幕的一侧拖到另一侧。)

如果您尝试突出显示此网格中的文本/控件,则无法select它。 这是怎么做的? 链接

拖动并select在鼠标向下事件上初始化和在随后的鼠标移动上更新。 处理事件以开始拖动或按照鼠标时,取消事件的冒泡并覆盖默认的浏览器返回:

像你这样的事情开始拖动mousedown和移动处理程序 –

e=e || window.event; pauseEvent(e); 
 function pauseEvent(e){ if(e.stopPropagation) e.stopPropagation(); if(e.preventDefault) e.preventDefault(); e.cancelBubble=true; e.returnValue=false; return false; } 

对于拖动,您正在捕获mousedownmousemove事件。 (也希望touchstarttouchmove事件,以支持触摸界面。)

您需要在downmove事件中调用event.preventDefault() ,以防止浏览器select文本。

例如(使用jQuery):

 var mouseDown = false; $(element).on('mousedown touchstart', function(event) { event.preventDefault(); mouseDown = true; }); $(element).on('mousemove touchmove', function(event) { event.preventDefault(); if(mouseDown) { // Do something here. } }); $(window.document).on('mouseup touchend', function(event) { // Capture this event anywhere in the document, since the mouse may leave our element while mouse is down and then the 'up' event will not fire within the element. mouseDown = false; }); 

我想评论,但我没有足够的声誉。 使用来自@kennebec的build议function解决了我的JavaScript拖动库中的问题。 它完美无瑕。

 function pauseEvent(e){ if(e.stopPropagation) e.stopPropagation(); if(e.preventDefault) e.preventDefault(); e.cancelBubble=true; e.returnValue=false; return false; } 

我在我的mousedown和mousemove自定义函数中调用它后,立即可以识别我点击正确的元素。 如果我只是在函数顶部调用它,我只是杀了任何点击文档。 我的function被注册为document.body上的一个事件。

这可以在大多数浏览器中使用CSS和IE中的不可选expando来实现。 在这里看到我的答案: 如何禁用文本select突出显示使用CSS?

尝试这个:

 document.onselectstart = function() { window.getSelection().removeAllRanges(); }; 

当select如下时,通过调用blur()函数来阻止它:

  <input Value="test" onSelect="blur();"> 

如果您需要使用JavaScript来阻止某个元素的文本select,那么对于我来说最简单的方法就是像这样分配userSelect样式:

 var myElement = document.createElement('div'); myElement.style.userSelect = 'none';