onclick
ハッシュリンクのイベントを使用し<div>
て、ポップアップとしてを開きます。ただし、中クリックはonclick
イベントをトリガーせずhref
、リンクの属性値のみを取得して、新しいページにURLをロードします。中クリックで<div>
ポップアップを開くにはどうすればよいですか?
onclick
ハッシュリンクのイベントを使用し<div>
て、ポップアップとしてを開きます。ただし、中クリックはonclick
イベントをトリガーせずhref
、リンクの属性値のみを取得して、新しいページにURLをロードします。中クリックで<div>
ポップアップを開くにはどうすればよいですか?
回答:
編集
この回答は廃止されており、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>
こちらのauxclick
イベントに関するmdnページをご覧ください。
if(event.button==1)
句による右クリックキャプチャを防ぐことができます。これが唯一の有効な回答です。
auxclick
イベントとの値を確認することの両方を使用する必要があることに注意してくださいe.button == 1
。答えを編集しました。
使用できます
クリックされたマウスボタンを識別します。
状態が変化したボタンを示す整数値を返します。
この慣例は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>
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
、公式仕様の一部ではないので、詳細に説明する必要があります。
人々が解決策の代わりに代替案を提供するとき、私は通常嫌いですが、解決策がすでに提供されているので、私は自分のルールを破るつもりです。
ミドルクリック機能が無効になっているWebサイトは、本当に、本当に私を悩ませます。現在のコンテンツを妨げることなく表示しながら、新しいコンテンツを新しいタブで開きたいので、通常は中クリックします。ミドルクリック機能をそのままにして、クリックした要素のHREF属性を介して関連コンテンツを利用できるようにするときはいつでも、それを実行する必要があると強く信じています。
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
。
この質問は少し古いですが、私は解決策を見つけました:
$(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から削除さ.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などのブラウザーの中央マウスボタンでは機能しません。
パーティーに遅れるのはわかっていますが、ミドルクリックの処理でまだ問題がある場合は、イベントを委任するかどうかを確認してください。委任の場合、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
は、最初の例のようにミドルクリックでは機能しません。