如何用光标拖动来防止文本/元素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; }
对于拖动,您正在捕获mousedown
和mousemove
事件。 (也希望touchstart
和touchmove
事件,以支持触摸界面。)
您需要在down
和move
事件中调用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';