ミドルクリックを使用してonclickイベントをトリガーする


90

onclickハッシュリンクのイベントを使用し<div>て、ポップアップとしてを開きます。ただし、中クリックはonclickイベントをトリガーせずhref、リンクの属性値のみを取得して、新しいページにURLをロードします。中クリックで<div>ポップアップを開くにはどうすればよいですか?


15
ミドルクリックでonclickイベントがトリガーされない場合でも、問題がどのように解決されたかはまだわかりません。
トマーシュZato -復活モニカ

3
@TomášZatoブラウザは中クリックで「クリック」イベントを発生させませんが、「マウスアップ」イベントを発生させる可能性があります。次に、JavaScriptフレームワークがこれを「クリック」アクションにバインドして混乱を招く可能性があります。私はの読書をお勧めします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別名Neal 2013

2
私にとって、FFはmousedownイベントでのみ機能します。クリックイベントはこれをscr.hu/1kig/su5c9
l00k

1
そのためのクロスブラウザ定数はあり2ますか?
fracz 2016

11
これはもはや、クロム55を参照して動作していない12及びこの質問
billc.cn

1
ミドルクリックが最初にクリックイベントをトリガーしないことが問題であった場合、これはどのように解決されますか?
Drazen Bjelovuk 2017

31

ミドルクリック/マウスホイールボタンを検出するには、イベントを使用する必要があります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>

こちらauxclickイベントに関するmdnページをご覧ください。


注:onauxclickは機能しますが、リンクを新しいタブで開きません...
Jonathan Laliberte

2
これが実際にChromeで機能する唯一の答えです。マウスの右ボタンに「クリック」イベントが必要な場合は、「contextmenu」を使用できます(右クリックだけで起動されるわけではありません):developer.mozilla.org/en-US/docs/Web/API/Element/…
Humpparitari、

1
上記の回答と組み合わせると、if(event.button==1)句による右クリックキャプチャを防ぐことができます。これが唯一の有効な回答です。
バディ

auxclickイベントとの値を確認することの両方を使用する必要があることに注意してくださいe.button == 1。答えを編集しました。
Flimm

26

使用できます

event.button

クリックされたマウスボタンを識別します。

状態が変化したボタンを示す整数値を返します。

  • 標準の「クリック」の場合は0、通常は左ボタン
  • 1は中央ボタン、通常はホイールクリック
  • 右ボタンの場合は2、通常は右クリック

この慣例はInternet Explorerでは実行されないことに注意してください。詳細については、QuirksModeをご覧ください。

ボタンの順序は、ポインティングデバイスの構成方法によって異なる場合があります。

また読む

どのマウスボタンがクリックされましたか?

どのマウスボタンがクリックされたかを調べるには、2つのプロパティがあります。これらのプロパティは必ずしもクリックイベントで機能するとは限らないことに注意してください。マウスボタンを安全に検出するには、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、それはjQueryのソースにブラウザ間で標準化されているように-ライン2756 -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.button、DOM L2イベントで定義されています。
Oriol

@Oriolは正しいですが、ブラウザのベンダーによって実装方法が異なります。OPは質問にjQueryのタグを付けたので、使用を提案しましたevent.whichMouseEvent.which、公式仕様の一部ではないので、詳細に説明する必要があります。
Russ Cam

@ rahul、7つ以上のボタンを持つゲーミングマウスはどうですか?egg-tech.com/blog/images/mouse%20buttons.jpg
Pacerier

実際、これはFirefoxやChromeなどのブラウザでは機能せず、プライマリクリックに対してのみ機能します。参照してください。12及びこの質問を
Flimm

8

人々が解決策の代わりに代替案を提供するとき、私は通常嫌いですが、解決策がすでに提供されているので、私は自分のルールを破るつもりです。

ミドルクリック機能が無効になっているWebサイトは、本当に、本当に私を悩ませます。現在のコンテンツを妨げることなく表示しながら、新しいコンテンツを新しいタブで開きたいので、通常は中クリックします。ミドルクリック機能をそのままにして、クリックした要素のHREF属性を介して関連コンテンツを利用できるようにするときはいつでも、それを実行する必要があると強く信じています。


しかし、Webページにタブがあり、ブラウザと同じ動作が必要な場合はどうでしょうか。ミドルクリックすると、既存のタブが閉じます。
cmxl 2018

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属性はのように1インデックスではなく0インデックスであることに注意してください.which


mozillaブラウザの機能を上書きできますか?たとえば、左クリックするとポップアップが開きますが、中クリックではポップアップが開かず、ポップアップが開かない新しいタブが開かれます。したがって、中クリック機能をオーバーライドしますmozilla ....
Sadesh Kumar N

Mozillaには、すべてのポップアップを新しいウィンドウではなく新しいタブで開く設定があります。ユーザーがこのオプションを有効にしている場合、私ができることは何もないと思います。これが起こっていない場合、コードまたは問題のあるページへのリンクを投稿できますか?
2009年

これは、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で作業する


私はあなたのユースケースを想定したくありませんが、多くの人が実際には「マウスアップ」イベントを実際に必要とするだろうと思います。マウスの中央ボタンでも機能します。
Bojidar Stanchev

FirefoxとChromeでこれを試すと、e.preventDefault()呼び出されても、リンクを新しいタブで開くというデフォルトの動作が妨げられません。
Flimm

5

廃止予定でjQueryから削除.on.liveているので、適切な方法はを使用することです。

$("#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などのブラウザーの中央マウスボタンでは機能しません。
Flimm

@Flimmに使用
Naftali別名Neal

うん。Stack Overflowには、古い回答に対する適切なソリューションがありません。「この回答は役に立たない」という理由で、反対票を投じなければならないと思います。さらに悪いことに、ピン留めされた回答は古くなっているため、数百または数千の反対票を投じることができ、OPが応答しない場合でも、ピン留めされたままになります。
Flimm

新しい質問をします:-)(これは古く、2020年の回答が欲しいと言っているこの質問を参照してください)。しかし、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.