Обнаружить кнопку средней кнопки (кнопка прокрутки) с помощью jQuery
У меня есть список с тегами для воспроизведения некоторых mp3 файлов onclick. Он отлично работает при привязке к событию 'click' с jQuery:
$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, но не помогает, ссылка всегда открывается обычно с побочным эффектом, который музыка начинает играть также с флэш-плеером.
Также preventDefault()
не работает вообще.
Может ли кто-нибудь сказать мне, как определить среднюю кнопку мыши (нажмите кнопку прокрутки)?
Спасибо за ваши комментарии.
PS: Я уже пробовал другие решения о "средней кнопке", доступной на этом сайте.
Протестировано во всех браузерах с таким же результатом.
EDIT:
Это также не работает, ссылка будет нормально открыта при использовании средней кнопки мыши. При использовании левой кнопки мыши ничего не происходит.
$oo.bind( 'mousedown click mouseup', function(e)
{ e.preventDefault(); e.stopPropagation(); return false; });
Ответы
Ответ 1
Хорошо, ребята,
Спасибо за ваш вклад. "@no.good.at.coding" имеет приятное решение, но не работает на 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;
}
});
Средняя кнопка действует теперь как левая кнопка мыши. Поскольку вы можете видеть, что IE нуждается в еще одном, мы должны расфокусировать тег связи в течение 1 секунды, чтобы избежать его открытия на дополнительной вкладке. Я использую здесь простой способ сделать это, создать прозрачный div (opacity = 0.01) "для глаз", который будет размещен над содержимым окна, чтобы любая ссылка на странице была не сфокусирована.
Пользователь не заметит никакой разницы, кроме того, что указатель мыши может измениться с указателя на значение по умолчанию, и через одну секунду он изменится на указатель (только IE). Я могу жить с этим.
Я принимаю это как ответ, но если у вас есть идея лучше, дайте мне знать.
Ответ 2
После быстрого теста кажется, что три из них упорядочены следующим образом:
- Влево - 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.
});
Ответ 3
Хорошо, я думаю, у меня это есть. Здесь работает скрипка. Трюк (по крайней мере, с 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;
}
});
Это решение было найдено на этой странице форума.
Ответ 4
e., который должен это сделать:
Простой пример:
$(document).ready(function(){
$(document).mousedown(function(e){
alert(e.which); // ##=> left
})
})
Ответ 5
Если вы (как я) нашли это из-за странных ошибок среднего клика от клиентов. И вы просто хотите, чтобы любой средний или правый щелчок отображался как левый клик
Забудьте об этом хромовом коде 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;
}
});