【发布时间】:2011-07-20 12:44:22
【问题描述】:
我有一个带有标签的列表,可以在点击时播放一些 mp3 文件。使用 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 插件时它会禁用默认处理,否则它将正常打开。
但是: 当我使用鼠标的滚动按钮并单击它时,不会触发单击事件并且链接正常打开。
我曾尝试使用 mousedown 或 mouseup 事件,但没有帮助,链接总是正常打开,副作用是音乐也开始使用 Flash 播放器播放。
另外preventDefault() 根本不起作用。
谁能告诉我如何检测鼠标中键点击(滚动按钮点击)?
感谢您的 cmets。
PS:我已经尝试过有关此站点上可用的“中间按钮”的其他解决方案。
在所有类型的浏览器中测试,结果相同。
编辑: 这也不起作用,使用鼠标中键时链接将正常打开。使用鼠标左键时,没有任何反应。
$oo.bind( 'mousedown click mouseup', function(e)
{ e.preventDefault(); e.stopPropagation(); return false; });
【问题讨论】:
-
您为什么希望
click被调用以进行中键单击?它们不一样-您不会期望右键单击它吗?你用mousedown方法尝试了什么?您是否检查了event.which属性以确定按下了哪个按钮? -
中键的处理方式与鼠标左键相同,A-tag 将被打开,因此您可以假设鼠标左键与中键相同——点击。如果不是,就像你刚才说的,中间点击事件的名称是什么? Event.which 没有任何区别,您可以测试是否按下了中间按钮,但您不能抑制中间按钮的默认行为,因为涉及另一个事件?链接仍然正常打开。
-
您的假设是错误的 - 仅仅因为鼠标左键单击显示类似于中键单击的行为并不意味着它们在内部是相同的。事实上,它们不是 - 单击鼠标中键时不会触发
click。但是,事实证明您对preventDefault()和stopPropagation()没有任何影响是正确的,我目前想不出任何解决方法。这是一个fiddle,它显示了我使用mousedown和mouseup取得了多大的进展 -
查看我的答案并在下面摆弄,我发现了一个论坛帖子,它提出了一种让它工作的方法。
-
@AdvaitJunnarkar 不,因为接受的答案提供了相同的解决方案(检测)并且还抑制了仅 IE 的行为(仅检测是不够的)。这是一个相当古老的问题,已有 8 年历史,部分与 IE 相关。 IE 已经死了,历史,那么为什么要使用“新”解决方案呢?已经有一个更好、更先进的解决方案。
标签: jquery button click scroll