选择/突出显示文本时会触发jQuery .click()

kri*_*che 34 javascript jquery javascript-events

我有<div>一堆文字.这<div>也有一个.click()使用jQuery 的事件.

我遇到的问题.click()是在选择/突出显示文本时会触发.在释放之前,甚至按住鼠标几秒钟.

这是一个显示问题的JSFiddle:http://jsfiddle.net/ym5JX/

我期望的行为是突出显示文本与单击元素不同.

Roc*_*mat 69

这是因为,click是一个mousedown接着一个mouseup.我的建议是检查处理程序getSelection内部click.如果已设置,那么您选择了一些内容,否则您只需单击即可.

$('#click').click(function() {
    var sel = getSelection().toString();
    if(!sel){
        alert("clicked");
    }
});?
Run Code Online (Sandbox Code Playgroud)

演示:http://jsfiddle.net/ym5JX/3/

  • 当用户在其他地方选择了文本时,为了不破坏整个应用程序,最好检查所选文本是否在相关元素中:`if(!e.target.contains(getSelection(..anchorNode))`. (7认同)
  • 可能想检查长度`haveSel = getSelection().toString().length> 0` (2认同)
  • 检查其他地方的选择似乎没有必要。原因是“真实”点击清除了页面上其他地方的任何选择。 (2认同)

Sel*_*gam 7

正如我发表的评论,mosuedown + mouseup = click这正是突出显示的内容.有解决方法..见下文,

var isClick = 0;
$('#click').click(function() {
    if (isClick == 1) {
        alert("clicked");
    }
}).mousedown(function () {
    isClick = 1;
}).mousemove(function () {
    isClick = 0;
});
Run Code Online (Sandbox Code Playgroud)

DEMO

  • 检查鼠标是否在"mousedown"和"mouseup"之间移动,聪明:-P (5认同)