Я использую onclick
событие хешированной ссылки, чтобы открыть <div>
всплывающее окно. Но средний щелчок не вызывает onclick
событие, а только принимает href
значение атрибута ссылки и загружает URL-адрес на новой странице. Как я могу использовать средний щелчок, чтобы открыть <div>
всплывающее окно?
javascript
jquery
Sadesh Kumar N
источник
источник
Ответы:
РЕДАКТИРОВАТЬ
Этот ответ устарел и не работает в Chrome. Скорее всего, вы в конечном итоге используете событие auxlink , но, пожалуйста, обратитесь к другим ответам ниже.
/РЕДАКТИРОВАТЬ
Ответ beggs правильный, но похоже, что вы хотите предотвратить действие по умолчанию - средний щелчок. В этом случае включите следующие
$("#foo").on('click', function(e) { if (e.which == 2) { e.preventDefault(); alert("middle button"); } });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <a id="foo" href="http://example.com">middle click me</a>
preventDefault () остановит действие события по умолчанию.
источник
.live
это устарело и было удалено в пользу.on
2
?Для обнаружения кнопки со средним щелчком / колесиком мыши необходимо использовать событие
auxclick
. Например:<a href="https://example.com" onauxclick="func()" id="myLink"></a>
Затем в вашем файле сценария
function func(e) { if (e.button == 1) { alert("middle button clicked") } }
Если вы хотите сделать это из JavaScript (без использования атрибута HTML
onauxclick
), то выaddEventListener
к элементу:let myLink = document.getElementById('myLink') myLink.addEventListener('auxclick', function(e) { if (e.button == 1) { alert("middle button clicked") } })
<a id="myLink" href="http://example.com">middle click me</a>
Посетите страницу mdn о
auxclick
мероприятии здесь .источник
if(event.button==1)
предложению, это единственный рабочий ответ.auxclick
событие, так и проверить значениеe.button == 1
. Я отредактировал ответ.Вы можете использовать
event.button
чтобы определить, какая кнопка мыши была нажата.
Возвращает целочисленное значение, указывающее кнопку, состояние которой изменилось.
Обратите внимание, что это соглашение не соблюдается в Internet Explorer: подробности см. В QuirksMode.
Порядок кнопок может отличаться в зависимости от того, как было настроено указывающее устройство.
Также читайте
Какая кнопка мыши была нажата?
document.getElementById('foo').addEventListener('click', function(e) { console.log(e.button); e.preventDefault(); });
<a id="foo" href="http://example.com">middle click me</a>
источник
event.which
поскольку он стандартизован для всех браузеров в исходном коде jQuery - строка 2756 -if ( !event.which && event.button ) event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
MouseEvent.which
не определен ни в одной спецификации, ноMouseEvent.button
определен в событиях DOM L2.event.which
но должен был уточнить, чтоMouseEvent.which
это не часть официальной спецификации.Обычно я ненавижу, когда люди предлагают альтернативы вместо решений, но, поскольку решения уже предоставлены, я собираюсь нарушить свое собственное правило.
Веб-сайты, на которых отключена функция щелчка средней кнопкой, как правило, действительно меня беспокоят. Я обычно щелкаю средней кнопкой мыши, потому что хочу открыть новый контент в новой вкладке, имея беспрепятственный обзор текущего контента. Каждый раз, когда вы можете оставить функцию щелчка средней кнопкой в покое и сделать соответствующий контент доступным с помощью атрибута HREF элемента, по которому щелкнули мышью, я твердо верю, что вам следует поступить именно так.
источник
Этот вопрос немного устарел, но я нашел решение:
$(window).on('mousedown', function(e) { if( e.which == 2 ) { e.preventDefault(); } });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <a href="http://example.com">middle click me</a>
Chrome не запускает событие "щелчок" колесика мыши
Работа в FF и Chrome
источник
e.preventDefault()
вызывается.jQuery предоставляет
.which
атрибут события, который присваивает идентификатору кнопки щелчка слева направо как 1, 2, 3. В этом случае вам нужно 2.Применение:
$("#foo").live('click', function(e) { if( e.which == 2 ) { alert("middle button"); } });
Ответ Adamantium также будет работать, но вам нужно остерегаться IE, как он отмечает:
$("#foo").live('click', function(e) { if((!$.browser.msie && e.button == 1) || ($.browser.msie && e.button == 2)) { alert("middle button"); } });
Также помните, что
.button
атрибут имеет индекс 0, а не 1, как.which
.источник
Правильный метод - использовать
.on
, поскольку.live
он устарел и затем удален из jQuery:$("#foo").on('click', function(e) { if( e.which == 2 ) { e.preventDefault(); alert("middle button"); } });
Или, если вы хотите "живого" ощущения,
#foo
которого нет на вашей странице в начале документа:$(document).on('click', '#foo', function(e) { if( e.which == 2 ) { e.preventDefault(); alert("middle button"); } });
оригинальный ответ
источник
click
не работает для средней кнопки мыши в таких браузерах, как Firefox и Chrome.Я знаю, что опаздываю на вечеринку, но тем, у кого все еще есть проблемы с обработкой среднего щелчка, проверьте, делегируете ли вы мероприятие. В случае делегирования
click
событие не срабатывает. Сравните:Это работает для средних кликов:
$('a').on('click', function(){ console.log('middle click'); });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <a href="http://example.com">middle click me</a>
Это не работает для средних кликов:
$('div').on('click', 'a', function(){ alert('middle click'); });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div> <a href="http://example.com">middle click here</a> </div>
Если вам все еще нужно отслеживать средний щелчок с помощью делегирования событий , единственный способ, как указано в соответствующем билете jQuery , - использовать
mousedown
илиmouseup
вместо него. Вот так:Это работает для делегированных средних щелчков:
$('div').on('mouseup', 'a', function(){ console.log('middle click'); });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div> <a href="http://example.com">middle click me</a> </div>
Смотрите онлайн здесь .
источник
click
не работает для средних кликов, как в вашем первом примере.