Подтвердить что ты не робот

Jquery/JS предотвращает контекстное меню в браузерах

У меня есть 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, но не удачу.

4b9b3361

Ответ 1

Вы можете отключить правый щелчок, добавив oncontextmenu = "return false;" к тегу вашего тела.

<body oncontextmenu="return false;">

Ответ 2

Вы можете отключить контекстное меню для любого элемента, который вы хотите:

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

Чтобы полностью отключить контекстное меню на странице (спасибо Ismail), используйте следующее:

$(document).contextmenu(function() {
    return false;
});

Ответ 3

Одна строка jQuery:

$('[id^="fBox"]').on("contextmenu", function(evt) {evt.preventDefault();});

Ответ 4

Попробуйте следующее:

$('#fBox' + folderID).bind("contextmenu", function () {
                alert("Right click not allowed");
                return false;
            });

Ответ 5

Try...

$('[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) {
    ...
});

Ответ 6

Это поведение браузеров по умолчанию теперь отключает переопределение альтернативного щелчка. Каждый пользователь должен разрешить это поведение в последних браузерах. Например, я не допускаю такого поведения, поскольку мне всегда нужно всплывающее меню по умолчанию.

Ответ 7

Использование jQuery:

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

Или отключить контекстное меню на всей странице:

$(document).bind("contextmenu",function(e){
    return false;
});

Ответ 8

Я согласен с @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
});

Таким образом, вы избегаете обработки двух разных событий только для того, чтобы захватить контекстное меню и настроить его:)

Конечно, это предполагает, что вы не возражаете, если отображается стандартное контекстное меню, когда кто-то нажимает на элементы, которые вы не выбрали. Вы можете также показать различные контекстные меню в зависимости от того, где пользователи щелкнули правой кнопкой мыши.

НТН

Ответ 9

// 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();

    }
});

Ответ 10

Для меня

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

jQuery выполняет задание:)