54

右クリックのポップアップメニューを備えたdivがあります。

// Attatch right click event to folder for extra options
$('#fBox' + folderID).mousedown(function(event) {
    if (event.which == 3) {

        // Set ID
        currRClickFolder = folderID;

        // Calculate position to show popup menu
        var height = $('#folderRClickMenu').height();
        var width = $('#folderRClickMenu').width();
        leftVal = event.pageX - (width / 2) + "px";
        topVal = event.pageY - (height) + "px";
        $('#folderRClickMenu').css({ left: leftVal, top: topVal }).show();

    }
});

ただし、この要素のブラウザは引き続きデフォルトメニュー(コピー/貼り付け/プロパティなど)をポップアップします。これを無効にする方法はありますか?私はfalseを返そうとしましたが、運はありません。

4

12 に答える 12

112

oncontextmenu = "return false;"を追加すると、右クリックを無効にできます。あなたの体のタグに。

<body oncontextmenu="return false;">
于 2011-02-07T10:32:56.317 に答える
46

必要な要素のコンテキストメニューを無効にできます。

$('selector').contextmenu(function() {
    return false;
});

ページのコンテキストメニューを完全に無効にするには(Ismailのおかげで)、次を使用します。

$(document).contextmenu(function() {
    return false;
});
于 2014-01-07T13:31:21.673 に答える
13

1つのjQuery行:

$('[id^="fBox"]').on("contextmenu", function(evt) {evt.preventDefault();});
于 2013-05-09T14:10:44.180 に答える
8

これを試して:

$('#fBox' + folderID).bind("contextmenu", function () {
                alert("Right click not allowed");
                return false;
            });
于 2011-02-07T10:35:07.653 に答える
4

試す...

$('[id^="fBox"]').mousedown(function(event) {
    if (event.which == 3) {
        event.preventDefault();
        // Set ID
        currRClickFolder = $(this).attr('id').replace('fBox','');

        // Calculate position to show popup menu
        var height = $('#folderRClickMenu').height();
        var width = $('#folderRClickMenu').width();
        leftVal = event.pageX - (width / 2) + "px";
        topVal = event.pageY - (height) + "px";
        $('#folderRClickMenu').css({ left: leftVal, top: topVal }).show();

    }
});

これらのボックスを動的に作成する場合は...

$('[id^="fBox"]').live('mousedown',function(event) {
    ...
});
于 2011-02-07T10:42:28.990 に答える
3

@aruseniに同意します。本文レベルでoncontextmenuをブロックすると、ページ内のすべての要素の右クリックでの標準のコンテキストメニューを回避できます。

しかし、より細かく制御したい場合はどうでしょうか。

私も同様の問題を抱えていて、良い解決策を見つけたと思いましたcontextmenu。処理したい特定の要素のイベントにコンテキストメニューコードを直接添付してみませんか?このようなもの:

// Attatch right click event to folder for extra options
$('#fBox' + folderID).on("contextmenu", function(event) {
  // <-- here you handle your custom context menu
  // Set ID
  currRClickFolder = folderID;

  // Calculate position to show popup menu
  var height = $('#folderRClickMenu').height();
  var width = $('#folderRClickMenu').width();
  leftVal = event.pageX - (width / 2) + "px";
  topVal = event.pageY - (height) + "px";
  $('#folderRClickMenu').css({ left: leftVal, top: topVal }).show();

  event.stopImmediatePropagation();
  return false; // <-- here you avoid the default context menu
});

したがって、コンテキストメニューをキャプチャしてカスタマイズするためだけに2つの異なるイベントを処理することは避けます:)

もちろん、これは、選択していない要素をクリックしたときに標準のコンテキストメニューが表示されてもかまわないことを前提としています。ユーザーが右クリックした場所に応じて、さまざまなコンテキストメニューを表示することもできます。

HTH

于 2013-06-18T15:51:19.960 に答える
2

これは、代替クリックオーバーライドを無効にするブラウザのデフォルトの動作です。各ユーザーは、最近のブラウザでこの動作を許可する必要があります。たとえば、デフォルトのポップアップメニューが常に必要なので、この動作は許可しません。

于 2011-02-07T10:36:35.530 に答える
2

jQueryの使用:

$('[id^="fBox"]').bind("contextmenu",function(e){
    return false;
});

または、ページ全体でコンテキストメニューを無効にします。

$(document).bind("contextmenu",function(e){
    return false;
});
于 2012-11-06T23:12:11.480 に答える
2

私のため

$('body').on('contextmenu',function(){return false;});

jQueryがその役割を果たします:)

于 2013-10-18T07:47:28.747 に答える
1
// Attatch right click event to folder for extra options
$('#fBox' + folderID).mousedown(function(event) {
    if (event.which == 3) {
        event.preventDefault();
        // Set ID
        currRClickFolder = folderID;

        // Calculate position to show popup menu
        var height = $('#folderRClickMenu').height();
        var width = $('#folderRClickMenu').width();
        leftVal = event.pageX - (width / 2) + "px";
        topVal = event.pageY - (height) + "px";
        $('#folderRClickMenu').css({ left: leftVal, top: topVal }).show();

    }
});
于 2011-02-07T10:34:06.230 に答える
1

これは、問題が発生したときに最近使用した方法です(jQueryも少し使用しています)。mousedownイベントはコンテキストメニューの前に発生するため、このトリックはそれをキャッチしているようです。これは、本体レベルのoncontextmenuハンドラーをアタッチして、mousedownイベントで一時的にfalseを返し、目的のアクションを実行してから、重要な部分として、後でハンドラーを削除することを忘れないでください。 。

これは、例として抽出されたコードの一部にすぎません...

$(div)
    .mousedown(function (e) {
        if (!leftButtonPressed(e)) {
            disableContextMenu(true);
            showOptions({ x: e.clientX, y: e.clientY }, div); // do my own thing here
        }
    });

showoptions()rtnが終了すると、コールバック関数が実行され、disable-rtnが再度呼び出されますが、「false」が使用されます。

disableContextMenu(false);

これが私のdisableContextMenu()rtnです:

function disableContextMenu(boolDisable, fn) {
    if (boolDisable) {
        $(document).contextmenu(function (e) {
            if (fn !== undefined) {
                return fn(e);
            } else {
                return false;
            }
        });
    } else {
        $(document).prop("oncontextmenu", null).off("contextmenu");
    }
}
于 2018-01-03T23:53:14.427 に答える
0

右クリックのコンテキストメニューを無効にするために利用できるJavascriptスニペットはたくさんありますが、JQueryを使用すると作業がはるかに簡単になります。

    $(document).bind("contextmenu",function(e){
        return false;
    });
}); 
于 2019-11-19T10:03:29.757 に答える