用jQuery检测中间button(滚动button)
我有一个标签列表,播放一些MP3文件onclick。 使用jQuery绑定“click”事件时,它工作正常:
$oo.data({'__mp3play':true,'wapiHandle':h+0,'wapiIndex':o.ajaxPlayList[h].length}) .bind( 'click', function() { var wh = $j(this).data('wapiHandle'); if( typeof o.regObjects[wh] == 'object' && o.regObjects[wh].play(this.href)) { return false; } });
当点击鼠标左键时:当我的Flash插件被加载时,它将禁用默认处理,否则它将被正常打开。
但是:当我使用鼠标的滚动button,并点击它,点击事件将不会被解雇,链接正常打开。
我试图使用mousedown或mouseup事件,但没有帮助,链接总是正常打开,音乐开始播放与Flash播放器的副作用。
另外preventDefault()
根本不起作用。
有人可以告诉我如何检测鼠标中键单击(滚动button单击)?
谢谢您的意见。
PS:我已经尝试了其他解决scheme,关于这个网站上的“中间button”。
在所有types的浏览器中进行testing,获得相同的结果。
编辑:这也不起作用,链接将正常打开时使用鼠标中键。 当使用鼠标左键时,什么也没有发生。
$oo.bind( 'mousedown click mouseup', function(e) { e.preventDefault(); e.stopPropagation(); return false; });
经过一个快速testing,看起来这三个命令如下:
- 左 – 1
- 中间 – 2
- 对 – 3
所以如果你有:
$(document).mousedown(function(e){ switch(e.which) { case 1: //left Click break; case 2: //middle Click break; case 3: //right Click break; } return true;// to allow the browser to know that we handled it. });
好的,我想我已经明白了。 这似乎是一个小提琴工作 。 诀窍(至less在FF4)似乎是将一个点击处理程序绑定到document
,并停止传播。
$(document).click(function(e){ //not checking for the right click will prevent the context-menu from showing, you may or may not want to do that if (e.which != 3) { e.preventDefault(); return false; } });
此解决scheme在此论坛页面上find 。
好的,伙计们,
谢谢您的意见。 '@ no.good.at.coding'有一个很好的解决scheme,但在IE上不起作用(见本文后面的内容),但这是一个很好的起点。 我把他的代码改为:
// Avoid relations will be opened in extra tab when clicking middle-scroll-button to open it $(document).bind($.browser.msie ? "mousedown" : "click", function(e) { if (e.which == 2 && e.target.tagName == 'A') { var bIE = $.browser.msie, $o = $(e.target), oe = $o.data('events'), b = true, f = function(){}; if (typeof oe == 'object' && oe['click']) { f = function(){ $o.trigger('click'); } } else { b = (typeof $o[0].href == 'string' && ($o[0].target == undefined || $o[0].target == '' || $o[0].target == '_self')); if (b) { f = function () { window.location.href=$o[0].href; }; } } if (!b) { return; } e.stopImmediatePropagation(); e.stopPropagation(); e.preventDefault(); if (bIE) { if (!window.__swcp__) { window.__swcp__= $('<div style="position:fixed;top:0px;left:0px;width:100%;height:100%;background:#000;display:block;z-index:9999;opacity:0.01;filter:alpha(opacity:1);" />').appendTo('body'); } window.__swcp__.show(); } setTimeout(f, 50); if (bIE) { setTimeout( function() { window.__swcp__.hide(); }, 1000 ); } return false; } });
中间button现在就像鼠标的左键一样。 正如你所看到的IE浏览器需要更多,我们必须将链接标签的焦点放置1秒,以避免在额外的选项卡中打开链接标签。 我在这里使用一个简单的方法来做到这一点,创build一个透明的div(不透明度= 0.01),将被放置在窗口的内容,所以页面上的任何链接将不重点,用户不会注意到任何差异鼠标指针可以从指针改变为默认值,一秒钟后,它会变回指针(只有IE),我可以忍受。
我接受这个答案,但如果你有更好的主意让我知道。
e。它应该这样做:
简单的例子:
$(document).ready(function(){ $(document).mousedown(function(e){ alert(e.which); // ##=> left }) })
如果你(像我一样)发现这个是因为奇怪的 – o中间点击来自客户端的错误。 而你只是想要任何中间或右键单击行为就像一个左键单击
忘记所有IE浏览器的蹩脚的代码。
简短而甜美:
$(document).click(function(e){ // checking for any non left click and convert to left click. if (e.which != 1) { e.which = 1; } });
显然,如果你需要更多的歧视,你可以做一些事情:
$('a.no-non-left-clickies').click(function(e){ // checking for any non left click and convert to left click. if (e.which != 1) { e.which = 1; } });