JavaScript禁止双击选择

时间:2010-03-11 11:10:18

标签: javascript jquery

我正在制作幻灯片库。 我的问题是,当我非常快地点击导航div时,会触发浏览器默认行为(选择内容)。

我的问题是:如何禁止默认的双击行为?

navigationDiv.onclick = function () {
  // do something
};

jQuery解决方案也适用,因为我正在使用它。

提前致谢!

9 个答案:

答案 0 :(得分:7)

$("yourselector").dblclick(function(){
    return false;
});

您还可以使用 event.preventDefault()

$("yourselector").dblclick(function(event){
    event.preventDefault();
});

答案 1 :(得分:3)

您可以尝试禁用目标元素的 onselectstart 事件。

navigationDiv.onselectstart=function(){return false}

不确定这是否兼容x-browser。 (我会检查一下)

修改
原来这是一个仅限IE的事件。要在Mozilla中完成相同的操作,您必须禁用 -moz-user-select CSS样式。在JavaScript中:

navigationDiv.style.MozUserSelect="none"

说实话,我认为你最好禁用双击事件,如此处的其他评论所述。

答案 2 :(得分:3)

仅供参考,在Firefox和Safari / Chrome中,也可以通过CSS禁用选择:

.navigationDiv {
    -moz-user-select: none;             
    -webkit-user-select: none;  
}

我认为当你的目的只是为了防止在某个元素上发生选择时,这会更简单。

答案 3 :(得分:1)

在事件处理程序的末尾放置return false;应该能够抑制默认选择行为。

答案 4 :(得分:0)

您可以尝试让“dblclick”事件返回false吗?

 $('.someStuff').bind('dblclick', function() { return false; });

答案 5 :(得分:0)

取消ondblclick事件:

navigationDiv.ondblclick = function () { 
  return false;  // cancel default
}; 

http://www.quirksmode.org/js/events_mouse.html

答案 6 :(得分:0)

非常简单:

navigationDiv.ondblclick = function (event) {
  // do something
  if (!event) event = window.event;
        if (event.preventDefault) 
            event.preventDefault();
        else 
            event.returnValue = false;

};

这适用于IE和Mozilla浏览器。

答案 7 :(得分:0)

仅当在元素BEING CLICKED中调用而不是在父级事件处理程序中调用时,在 dblclick 处理程序中调用 event.preventDefault()会有所帮助。

在一个容器中有多个子级的情况下,默认的双击行为将在一个子级中发生,并上升到其父级。在这种情况下,有2个选项:

  1. 清除父级事件处理程序中的选择,例如: window.getSelection()。empty()。这种方法的问题在于,您会注意到所选文本的闪烁,并且在Opera中会弹出一个窗口(“复制”,“搜索”)。
  2. 遍历所有子级,并在其 dblclick 中调用 e.PreventDefault()

答案 8 :(得分:0)

e.preventDefault()return false都不能确保在任何情况下都不会发生双击的默认操作(文本选择)。但是,在阅读了this notethis answer之后,我为自己的类似问题写了一个可行的解决方案:

$(...your selector...)
    .on('mousedown',function(e){ if (e.detail>1) return false }) // prevent dblclick default
    .on('dblclick', ...your dblclick handler...);