【发布时间】:2011-01-26 07:58:51
【问题描述】:
我目前正在制作幻灯片库。 我的问题是,当我非常快速地单击导航 div 时,会触发浏览器的默认行为(内容选择)。
我的问题是:如何抑制默认的双击行为?
navigationDiv.onclick = function () {
// do something
};
jQuery 解决方案也很合适,因为我正在使用它。
提前致谢!
【问题讨论】:
标签: javascript jquery
我目前正在制作幻灯片库。 我的问题是,当我非常快速地单击导航 div 时,会触发浏览器的默认行为(内容选择)。
我的问题是:如何抑制默认的双击行为?
navigationDiv.onclick = function () {
// do something
};
jQuery 解决方案也很合适,因为我正在使用它。
提前致谢!
【问题讨论】:
标签: javascript jquery
$("yourselector").dblclick(function(){
return false;
});
您也可以使用event.preventDefault()
$("yourselector").dblclick(function(event){
event.preventDefault();
});
【讨论】:
仅供参考,在 Firefox 和 Safari/Chrome 中,也可以通过 CSS 禁用选择:
.navigationDiv {
-moz-user-select: none;
-webkit-user-select: none;
}
我认为当您的目的只是防止在某个元素上发生选择时,这会更简单。
【讨论】:
您可以尝试禁用目标元素的 onselectstart 事件。
navigationDiv.onselectstart=function(){return false}
不确定这是否与 x 浏览器兼容。 (我会检查它)
编辑
原来这是一个仅限 IE 的事件。要在 Mozilla 中完成相同的操作,您必须禁用 -moz-user-select CSS 样式。在 JavaScript 中是:
navigationDiv.style.MozUserSelect="none"
说实话,我认为您最好禁用双击事件,如此处其他 cmets 所述。
【讨论】:
将return false; 放在事件处理程序的末尾应该能够抑制默认选择行为。
【讨论】:
在 dblclick 处理程序中调用 event.preventDefault() 只有在被点击的元素中调用它才会有帮助,而不是在父事件处理程序中调用。
在有多个子容器的情况下,双击的默认行为将发生在子容器中并冒泡到其父容器。在这种情况下,有 2 个选项:
【讨论】:
您可以尝试让“dblclick”事件返回 false 吗?
$('.someStuff').bind('dblclick', function() { return false; });
【讨论】:
取消ondblclick事件:
navigationDiv.ondblclick = function () {
return false; // cancel default
};
【讨论】:
return false 不适用于 Mozilla 引擎。相反,停止执行事件而不是函数。
很简单:
navigationDiv.ondblclick = function (event) {
// do something
if (!event) event = window.event;
if (event.preventDefault)
event.preventDefault();
else
event.returnValue = false;
};
这适用于 IE 和 Mozilla 浏览器。
【讨论】:
e.preventDefault() 和 return false 都不能确保在所有情况下都不会发生双击的默认操作(文本选择)。但是,在阅读了 this note 和 this answer 之后,我已经为自己的类似问题编写了一个可行的解决方案:
$(...your selector...)
.on('mousedown',function(e){ if (e.detail>1) return false }) // prevent dblclick default
.on('dblclick', ...your dblclick handler...);
【讨论】: