10

背景:我正在创建一个让人想起whenisgood.net的表格,因为它具有点击-n-拖动切换表格元素的功能。mousedown当鼠标左键、中键和右键激活事件时,我想调用不同类型的切换代码。

通过使用 JQuery,我有了一个良好的开端。

$(".togglable").bind("contextmenu", function() {return false;});
$(".togglable").bind("mousedown", function(e){
  e.preventDefault();
  toggle(this, e);
});

toggle()函数中,我可以使用e.which来确定单击了哪个按钮。

妙语:我使用了e.preventDefault () 希望它可以停止滚动的中间点击默认行为。它没有。我能做些什么来阻止滚动动作激活?

另请参阅“使用中键触发 onclick 事件”

4

4 回答 4

12

可以使用 Javascript 禁用中键,但仅限于 IE、WebKit 和 Konquerer。Firefox 需要一个配置文件编辑。现在是 2017 年,Firefox 50 支持这一点。

于 2009-12-18T22:01:05.973 回答
6

这是一个老问题......但如果我理解正确,你想通过点击鼠标中键来禁用滚动。

现在,你可以用一行 vanilla JS 做到这一点:

document.body.onmousedown = function(e) { if (e.button === 1) return false; }
于 2015-05-24T12:33:47.977 回答
3

目前,我的解决方案是这样的:(更多 jquery!)

$(".togglable").wrap(
  "<a href='javascript:void(0);'
  onclick='return false;'></a>"
);

通过将它包装在一个链接中(通过jquery wrap),浏览器认为它是一个链接并且不会在中键单击时滚动,即使您拖动鼠标也是如此。有了这个设置和我的情况,有几个(小)陷阱。

Firefox 会在您单击鼠标中键时打开一个新选项卡,但前提是您不拖动。Opera 将在您中键单击、拖动或不拖动时打开一个新选项卡。这就是为什么我使用href='javascript:void(0);'而不是仅仅href='#'使用 -- 这样客户端的浏览器就不会加载整个页面,而只是一个带有奇怪 url 的空白页面。

但是这个解决方案在 Chrome 和 Safari 上就像一个魅力。它适用于 IE8,除了现在当我左键单击并拖动时,它会将指针更改为“不能这样做”符号,因为它认为我想将链接拖到某个地方。在旧版本的 IE 上未经测试。

于 2009-12-30T23:07:58.533 回答
2

它已经有点老了,但我已经努力在 Firefox 中规避这个问题(我仍在使用 3.6),我会分享我的发现,也许有人会觉得它有帮助。

检查如果您创建一个空的 HTML 文件(或带有几个段落的小文档)并在 Firefox 中加载它,是否不会出现中键滚动条。这是因为<body>的宽度和高度小于窗口大小。如果你放了很多<br>'s,情况并非如此,并且滚动条出现在中键单击时。

谷歌通过确保(通过 JS)<body>大小始终小于窗口大小,另外加上 <body style="overflow:hidden;">.

这在一般情况下很难实现,但有时可能有用。

于 2011-09-08T20:28:00.633 回答