중간 클릭을 사용하여 onclick 이벤트 트리거


90

onclick해시 링크 이벤트를 사용하여를 <div>팝업 으로 엽니 다 . 그러나 중간 클릭은 onclick이벤트를 트리거하지 않고href 링크 의 속성 값만 가져와 새 페이지에 URL을로드합니다. 중간 클릭을 사용 <div>하여 팝업 으로 열려면 어떻게해야합니까?


15
중간 클릭이 onclick 이벤트를 트리거하지 않을 때 문제가 해결 된 방법을 여전히 이해하지 못합니다.
Tomáš Zato-Monica 복원 '2013-08-31

3
@ TomášZato 브라우저는 가운데 클릭으로 '클릭'이벤트를 발생시키지 않지만 '마우스 업'이벤트를 발생시킬 수 있습니다. 그러면 자바 스크립트 프레임 워크가 이것을 '클릭'액션에 바인딩하여 혼동을 줄 수 있습니다. 나는 unixpapa.com/js/mouse.html
rds

답변:


64

편집하다

이 답변은 더 이상 사용되지 않으며 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 () 는 이벤트의 기본 동작을 중지합니다.


19
명심 .live찬성되지 않으며 제거.on
닐 일명 Naftali

2
나를 위해 FF는 mousedown 이벤트에서만 작동합니다. 클릭 이벤트는이 일의 호출 scr.hu/1kig/su5c9을
l00k

1
브라우저 간 상수가 2있습니까?
fracz

11
크롬 55에서이 더 이상 작동 참조 1 , 2이 질문
billc.cn

1
중간 클릭이 시작되는 클릭 이벤트를 트리거하지 않는 문제가 발생했을 때 이것이 어떻게 해결책입니까?
Drazen Bjelovuk

32

가운데 클릭 / 마우스 휠 버튼이 감지 되려면 이벤트를 사용해야합니다 auxclick. 예 :

<a href="https://example.com" onauxclick="func()" id="myLink"></a>

그런 다음 스크립트 파일에서

function func(e) {
  if (e.button == 1) {
    alert("middle button clicked")
  }
}

있습니다 (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>

여기서auxclick 이벤트 에 대한 mdn 페이지를 확인 하십시오 .


참고 : onauxclick는 작동하지만 새 탭에서 링크 ... 열리지 않습니다
조나단 라리 베르테

2
이것은 실제로 Chrome에서 작동하는 유일한 답변입니다. 오른쪽 마우스 버튼에 "클릭"이벤트가 필요한 경우 "contextmenu"를 사용할 수 있습니다 (오른쪽 클릭으로 만 시작되지는 않지만) : developer.mozilla.org/en-US/docs/Web/API/Element/…
Humpparitari

1
위의 답변과 결합하면 if(event.button==1)절에 의한 오른쪽 클릭 캡처를 방지 할 수 있습니다 . 이것이 유일하게 작동하는 답변입니다.
Buddy

auxclick이벤트를 모두 사용 하고의 값을 확인해야합니다 e.button == 1. 나는 대답을 편집했다.
Flimm

26

당신이 사용할 수있는

event.button

클릭 한 마우스 버튼을 식별합니다.

상태가 변경된 버튼을 나타내는 정수 값을 반환합니다.

  • 표준 '클릭'의 경우 0, 일반적으로 왼쪽 버튼
  • 중간 버튼의 경우 1, 일반적으로 휠 클릭
  • 오른쪽 버튼의 경우 2, 일반적으로 오른쪽 클릭

Internet Explorer에서는이 규칙을 따르지 않습니다. 자세한 내용은 QuirksMode를 참조하십시오.

포인팅 장치가 구성된 방식에 따라 버튼 순서가 다를 수 있습니다.

또한 읽으십시오

어떤 마우스 버튼을 클릭 했습니까?

어떤 마우스 버튼이 클릭되었는지 알아내는 데는 두 가지 속성이 있습니다 : which 및 button. 이러한 속성이 클릭 이벤트에서 항상 작동하는 것은 아닙니다. 마우스 버튼을 안전하게 감지하려면 mousedown 또는 mouseup 이벤트를 사용해야합니다.

document.getElementById('foo').addEventListener('click', function(e) {
  console.log(e.button);
  e.preventDefault();
});
<a id="foo" href="http://example.com">middle click me</a>


4
내가 사용하는 것이 좋습니다 것 event.which라인 2756을 - - 그것이 jQuery를 소스에 브라우저에서 표준화 된대로if ( !event.which && event.button ) event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
러스 캠

2
@RussCam 그러나 MouseEvent.which어떤 사양에도 정의되어 있지 않지만 MouseEvent.buttonDOM L2 이벤트에 정의되어 있습니다.
오리올

@Oriol은 정확하지만 브라우저 공급 업체마다 다르게 구현되었습니다. OP는 jQuery로 질문에 태그를 지정했기 때문에 사용을 제안 event.which했지만 MouseEvent.which공식 사양의 일부가 아닌 정교하게 설명해야했습니다 .
Russ Cam

@rahul, 7 개 이상의 버튼이있는 게임용 마우스는 어떻습니까? egg-tech.com/blog/images/mouse%20buttons.jpg
Pacerier

실제로 이것은 Firefox 또는 Chrome과 같은 브라우저에서는 작동하지 않으며 기본 클릭에서만 작동합니다. 1 , 2이 질문을 참조하십시오 .
Flimm

8

나는 보통 사람들이 해결책 대신 대안을 제시하는 것을 싫어하지만 이미 해결책이 제공 되었기 때문에 나는 내 자신의 규칙을 어길 것입니다.

중간 클릭 기능이 무시되는 웹 사이트는 나를 정말 괴롭히는 경향이 있습니다. 현재 콘텐츠를 가리지 않고 새 탭에서 새 콘텐츠를 열고 싶기 때문에 일반적으로 가운데 클릭합니다. 중간 클릭 기능은 그대로두고 클릭 한 요소의 HREF 속성을 통해 관련 콘텐츠를 제공 할 수있을 때마다 그게해야 할 일이라고 강력히 믿습니다.


그러나 웹 페이지에 탭이 있고 브라우저에서와 동일한 동작을 원하면 어떻게해야합니까? middleclick은 기존 탭을 닫아야합니다.
cmxl

6

jQuery는 .which클릭 버튼 ID를 왼쪽에서 오른쪽으로 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속성은 .which.


Mozilla 브라우저의 기능을 재정의 할 수 있습니까? 예를 들어 왼쪽 클릭하면 팝업이 열립니다 ....하지만 중간 클릭의 경우 팝업이 열리지 않고 팝업이 열리지 않는 새 탭이 열립니다. 그래서 중간 클릭 기능을 재정의하고 싶습니다. mozilla ....
Sadesh Kumar N

Mozilla에는 새 창이 아닌 새 탭에서 모든 팝업을 여는 설정이 있습니다. 사용자가이 옵션을 활성화 하면 할 수있는 일이 없다고 생각 합니다. 이것이 일어나지 않는 경우 문제 페이지에 대한 일부 코드 또는 링크를 게시 할 수 있습니까?
beggs

Firefox 및 Chrome과 같은 브라우저에서는 작동하지 않습니다.
Flimm

6

이 질문은 약간 오래되었지만 해결책을 찾았습니다.

$(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에서 작업


나는 당신의 유스 케이스를 가정하고 싶지 않지만 많은 사람들이 실제로 'mouseup'이벤트를 대신 필요로 할 것이라고 확신합니다. 마우스 가운데 버튼으로도 작동합니다.
Bojidar Stanchev 2019

Firefox와 Chrome에서 이것을 시도 할 때 e.preventDefault()호출 되더라도 새 탭에서 링크를 여는 기본 동작을 차단하지 않습니다 .
Flimm

5

적절한 방법은, 사용하는 .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"); 
   }
});

원래 답변


clickFirefox 및 Chrome과 같은 브라우저의 마우스 가운데 버튼에는 이벤트 가 작동하지 않습니다.
Flimm

그것은 @Flimm에 사용
Naftali 일명 Neal

네. Stack Overflow에는 오래된 답변에 대한 좋은 솔루션이 없습니다. "이 답변은 더 이상 유용하지 않습니다"때문에 반대 투표를해야합니다. 더 나쁜 것은 고정 된 답변이 오래 되었기 때문에 수백 또는 수천 개의 다운 투표를 가질 수 있으며 OP가 응답하지 않는 경우 계속 고정 된 상태로 유지된다는 것입니다.
Flimm

새로운 질문을하세요 :-) 하지만 mousedown / mouseup 이벤트를 사용할 수도 있습니까?
Naftali 일명 Neal

그렇게해도 나 같은 사람들은 검색 엔진에서 올 때이 대답을 계속 접하게되며 고정 된 오답으로 인해 혼란 스러울 것입니다.
Flimm

3

파티에 늦었다는 것을 알고 있지만 여전히 중간 클릭을 처리하는 데 문제가있는 경우 이벤트를 위임했는지 확인하십시오. 위임의 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첫 번째 예 에서처럼 중간 클릭에는 작동하지 않습니다.
Flimm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.