首页 > 怎样才能做到单击时不影响注册的onmouseup事件?

怎样才能做到单击时不影响注册的onmouseup事件?

我现在把“选中文本内容”这一过程注册了onmouseup事件,因为onmouseuponclick其中的一个步骤,所以鼠标单击时也会触发onmouseup事件。怎样才能做到单击时不触发onmouseup事件?或者说把“选中文本内容”注册成其他什么事件也能达到一松开鼠标就注册了事件的效果?


  1. 我们能取消事件的默认行为,能取消事件的冒泡传播,阻止事件回调的执行,
    但是我们不能阻止事件的原始发生,

也就是说,mouseup/mousedown事件发生由用户的行为触发,代码层面无法阻止,那么click事件也就必然发生

  1. 可以监听input/textarea的select事件来获取用户选择的文本

  2. 当监听到click事件的时候,用户选择的区域已经失去焦点,已经不存在选择的文本了,所以对你最终的效果没有影响


事实上,如果你按下鼠标后过很久才松开鼠标,也同样会触发 click 事件。所以如何界是 mouseup 还是 click 实际上是你自己的问题。

需要判断是否选中文本内容的话,你可以在 mouseup 事件的 handler 中用 window.getSelection() 获取的 Selection 对象里的 Range 对象来判断是否选中了文字。


已经解决:
一开始的思路不对,老想着click的时候怎样才能不触发mouseup。
其实,我关注的重点在mouseup事件上,根本就不需要关心click怎么样,在注册mouseup事件时,handler函数里面加个判断条件就可以了。

//获取选中文本
function getSelectTxt(){ 
    if(document.selection){ 
        return document.selection.createRange().text;//ie
   } else { 
        return window.getSelection().toString();//标准
   }
}
function handler(){
    if(getSelectTxt()){ //当有选中内容时,执行以下代码
        //DO STH
    }
}
dom.addEventListener('mouseup',handler,false);

这样,click时,由于没有选中内容,handler函数没有执行实际性的代码,间接地达到了“单击时不影响注册的mouseup事件”。

当时还是看到有很多关于选中文字分享到微博的博文,我试了试,为什么他们的代码click时没有反应呢,好好看了一下别人的代码,搞明白了。

如果你还有更好的答案,请贴上,谢谢!

【热门文章】
【热门文章】