Как обнаружить правую мышь Нажмите + Удалить с помощью JQuery/Javascript - программирование
Подтвердить что ты не робот

Как обнаружить правую мышь Нажмите + Удалить с помощью JQuery/Javascript

Я хочу отслеживать правую мышь. Нажмите + Удалить событие в текстовом вводе html. я Преуспеть в отображении правой мыши Нажмите + Вставить/Вырезать/Копировать, как показано ниже

          $("#evalname").bind('paste/cut/copy', function(e)
          {
             do something

          });

Здесь "evalname" - это идентификатор моего ввода текста HTML. Я пробовал как

          $("#evalname").bind('delete', function(e)
          {
             do something

          });

но не работает. Есть ли способ сопоставить правую мышь Нажмите + Удалить событие в JQuery/Javascript?

4b9b3361

Ответ 1

Как уже было сказано, невозможно использовать в контекстах браузеров контекстное удаление, которое используется, на самом деле использование .bind('copy', func....) будет не только прослушивать копию contextmenu, но также и CTRL+c, поскольку она фактически привязана к буфер обмена.

Я собрал плагин, который, честно говоря, немного взломан, но он позволит вам поймать:

Контекст COPY, CUT, PASTE, DELETE - ТОЛЬКО Контекст COPY, CUT, PASTE, DELETE - И - CTRL + c, CTRL + x, CTRL + v

Или только один, два, три или четыре элемента (ов) любым из указанных способов. Конечно, одной из проблем был IE, он не запускает jQuerys .bind('input', func.... для прослушивания изменений, поэтому мне нужно было запустить его для IE, следовательно, может быть небольшая задержка (миллисекунды).

Плагин:

(function($) {
    $.fn.contextDelete = function(options) {
        var set = {
            'obj': $(this),
            'menu': false,
            'paste': false,
            'cut': false,
            'copy': false,
            'set': '',
            'ie': null,
        };
        var opts = $.extend({
            'contextDelete': function() {},
            'paste': function() {},
            'cut': function() {},
            'copy': function() {},
            'contextOnly': false,
        }, options);

        $(window).bind({
            click: function() {
                set.menu = false;
            },
            keyup: function() {
                set.menu = false;
            }
        });

        set.obj.bind({
            contextmenu: function() {
                set.menu = true;
                set.paste = false;
                set.cut = false;
                set.copy = false;
                set.val = set.obj.val();

                // Hack for IE:
                if ($.browser.msie) {
                    set.ie = setInterval(function() {
                        set.obj.trigger($.Event('input'));
                        if (!set.menu) {
                            clearInterval(set.ie);
                        }
                    }, 300);
                }
                // End IE Hack
            },
            paste: function(e) {
                set.paste = true;
                if (opts.contextOnly) {
                    if (set.menu) {
                        opts.paste(e);
                        set.menu = false;
                    }
                }
                else {
                    opts.paste(e);
                }
            },
            cut: function(e) {
                set.cut = true;
                if (opts.contextOnly) {
                    if (set.menu) {
                        opts.cut(e);
                        set.menu = false;
                    }
                }
                else {
                    opts.cut(e);
                }
            },
            copy: function(e) {
                set.copy = true;
                if (opts.contextOnly) {
                    if (set.menu) {
                        opts.copy(e);
                        set.menu = false;
                    }
                }
                else {
                    opts.copy(e);
                }
            },
            input: function(e) {
                if (set.menu && (!set.paste) && (!set.cut) && (!set.copy)) {
                    if (set.obj.val().length < set.val.length) {
                        opts.contextDelete(e);
                        set.menu = false;
                    }
                }
            }
        });
    };
})(jQuery);

Один пример использования, контекстное меню delete + контекстная копия ТОЛЬКО:

$('#evalname').contextDelete({
    contextDelete: function(e) {
        alert('You just deleted something!');
    },
    copy: function(e) {
        alert('You just copied something!');
    },
    contextOnly: true,
});

Нажмите здесь для DEMO

Ответ 2

Чтобы расширить текст комментария Stefan и ответ UberNeet:

Вы не можете определить выбор "Удалить" из контекстного меню.

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

Если вы хотите узнать момент опорожнения, даже если они не покинули поле, вы можете попытаться настроить таймер для опроса каждые полсекунды и проверить, пустое ли поле. Остерегайтесь использовать слишком тугое таймер, опасаясь переутомления плохого пользовательского браузера.

Ни один из них не является идеальным решением, но это радует работу внутри браузера!

Ответ 3

На сегодняшний день я не считаю, что браузеры его реализовали.

События для копирования, вставки и вырезания были добавлены как функциональные возможности для взаимодействия с Pasteboard, и поскольку delete не является частью картонной карты, он не был реализован.

Таблица поддержки браузера (2011/04) http://codebits.glennjones.net/editing/setclipboarddata.htm

Документы WebKit http://developer.apple.com/library/mac/#documentation/AppleApplications/Conceptual/SafariJSProgTopics/Tasks/CopyAndPaste.html

Документы Firefox https://developer.mozilla.org/en/DOM/element#Event_Handlers

Ответ 4

Попробуйте проверить значение поля "evalname" после определенного временного интервала. Используя это, мы сможем обнаруживать контекстное меню cut/copy/paste/delete

 var evalnameLength=$("#evalname").val().length;
    var enableSave;
        enableSave=setInterval(function(){
            if(evalnameLength!=$("#evalname").val().length){
                do something;
                clearInterval(enableSave);
            }
        },500);