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

Вызывать функцию после вставки правого клика в jQuery

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

$('#id').bind('paste', function(e) { 
    alert('pasting!') 
});

Но проблема в том, что он будет вызывать перед вставкой вставки. Я хочу, чтобы функция запускалась после правого щелчка → вставлять текст, вставленный в поле ввода, чтобы я мог получить доступ к вставленному значению внутри функции обработчика событий.

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

4b9b3361

Ответ 1

Вид взлома, но:

$("#id").bind('paste', function(e) {
        var ctl = $(this);
        setTimeout(function() {
            //Do whatever you want to $(ctl) here....
        }, 100);
});

Ответ 2

Почему бы не использовать событие ввода?

$("#id").bind('input', function(e) {
    var $this = $(this);
    console.log($this.val());
});

Ответ 3

Это остановит пользователя на любом вклеивании, копировании или разрезе с помощью клавиатуры:

$("#myField").keydown(function(event) {
   var forbiddenKeys = new Array('c', 'x', 'v');
   var keyCode = (event.keyCode) ? event.keyCode : event.which;
   var isCtrl;
   isCtrl = event.ctrlKey

     if (isCtrl) {
       for (i = 0; i < forbiddenKeys.length; i++) {
           if (forbiddenKeys[i] == String.fromCharCode(keyCode).toLowerCase()) {
             return false;
        }
     }
}
return true;
});

Этот будет делать то же самое для событий мыши:

$("#myField").bind("cut copy paste",function(event) {
   event.preventDefault();
});

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

Чтобы использовать его после события, как вы задавались вопросом по вашему вопросу, вы должны использовать JavaScript Timing Event

setTimeout(function() {
  // your code goes here
}, 10);

Ответ 4

У меня была такая же проблема, я решил реплицировать действие вставки с помощью javascript и вместо этого использовать этот вывод:

var getPostPasteText = function (element, pastedData) {
    // get the highlighted text (if any) from the element
    var selection = getSelection(element);
    var selectionStart = selection.start;
    var selectionEnd = selection.end;

    // figure out what text is to the left and right of the highlighted text (if any)
    var oldText = $(element).val();
    var leftPiece = oldText.substr(0, selectionStart);
    var rightPiece = oldText.substr(selectionEnd, oldText.length);

    // compute what the new value of the element will be after the paste
    // note behavior of paste is to REPLACE any highlighted text
    return leftPiece + pastedData + rightPiece;
};

См. В документе document.selection.createRange IE не указаны ведущие или завершающие пустые строки для источника функции getSelection.