0

ユーザーが特定のリンクを中クリックして新しいタブを開くことができないようにしたい。私は次のことを試しました:

$(window).on('mouseup', '.sptDetails', function(e){
    e.preventDefault();
    if(e.button == 1){
        return false;
    }
});

これはうまくいかないようです。

4

6 に答える 6

2

これは、jQuery とブラウザーの残念な組み合わせです。新しいタブが開かないようにするには、click(ではなくmouseup) イベントを使用する必要がありますが、jQueryは左ボタン以外のマウス ボタンのデリゲート クリック ハンドラーを実行しません

// Avoid non-left-click bubbling in Firefox (#3861)
if ( delegateCount && !(event.button && event.type === "click") ) {

できることは、デリゲート以外のハンドラーを使用して、ターゲット要素を自分で確認することです: http://jsbin.com/ojoqap/10/edit。これは、少なくとも Chrome で動作します (@Abraham に触発されました)。

$(document).on("click", function(e) {
  if($(e.target).is("a[href]") && e.button === 1) {
    e.preventDefault();
  }
});
于 2012-08-30T13:12:05.050 に答える
1

これは悪い考えであることを忘れないでください。これを行うことはお勧めしません。上記のコメントを参照してください。ただし、ミドルクリックを検出する方法は次のとおりです。

if (e.which == 2)
  return false
于 2012-08-30T12:47:05.820 に答える
1

「親」ページにナビゲーションが残っていることを確認しようとしていると思います。これに別の角度からアプローチするのが適切かもしれないと思います。

中クリックを防ぐ代わりに、JS以外のユーザーについて心配する必要がないと仮定すると、ajax呼び出しを介してコンテンツをロードし、現在のページに挿入することをお勧めします。

これは、使用可能なままにして、小さなjavascriptで実現できます(ただし、JSをオフにしているユーザーにとっては理想的ではないかもしれません)

考えるべきことです。このアイデアを改善する方法はたくさんあると思います。

HTML:

<a href="/mylink" id="href-load-content">
<div id="content-pane"></div>

Javascript:

$(function() {

     $('#href-load-content').data('href', function() { return $(this).attr('href') } )
        .attr('href', 'javascript:return;')
        .on('click', function() {
            $.get($(this).data('href'), function(msg) { $('#content-pane').html(msg); });
        });
});
于 2012-08-30T13:00:02.627 に答える
0

こんにちは、このリファレンスを見てください..

http://delphi.about.com/od/objectpascalide/l/blvkc.htm

中央のマウスのキーコードは 4 です

だからあなたはこのように試すことができます

if(e.which==4|| e.keycode==4)
e.returnValue=false;
于 2012-08-30T12:53:18.273 に答える
0
// <a href="http://google.com" id="google">Google</a><br> <a href="http://bing.com" id="bing">Bing</a>
$(function(){
  $(document).on("click", function(e){
    if($(e.target).is("#google") && e.button===1)
      e.preventDefault()
  })
})

フィドルリンク

于 2016-06-03T11:56:47.823 に答える