Поймать паста ввода - PullRequest
197 голосов
/ 26 марта 2009

Я ищу способ очистки ввода, который я вставляю в браузер, это возможно сделать с помощью jQuery?

Мне уже удалось придумать это:

$(this).live(pasteEventName, function(e) {
 // this is where i would like to sanitize my input
 return false;
}

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

Ответы [ 17 ]

322 голосов
/ 01 октября 2009

ОК, только что столкнулся с той же проблемой .. Я прошел длинный путь

$('input').on('paste', function () {
  var element = this;
  setTimeout(function () {
    var text = $(element).val();
    // do something with text
  }, 100);
});

Просто небольшой тайм-аут до заполнения .val () func.

Е.

59 голосов
/ 23 апреля 2015

Вы можете получить значение прямо из события . Хотя немного глупо, как туда добраться.

Верните false, если вы не хотите, чтобы он прошел.

$(this).on('paste', function(e) {

  var pasteData = e.originalEvent.clipboardData.getData('text')

});
40 голосов
/ 10 апреля 2012

Для кроссплатформенной совместимости он должен обрабатывать события oninput и onpropertychange:

$ (something).bind ("input propertychange", function (e) {
    // check for paste as in example above and
    // do something
})
18 голосов
/ 27 марта 2009

Я исправил это, используя следующий код:

$("#editor").live('input paste',function(e){
    if(e.target.id == 'editor') {
        $('<textarea></textarea>').attr('id', 'paste').appendTo('#editMode');
        $("#paste").focus();
        setTimeout($(this).paste, 250);
    }
});

Теперь мне просто нужно сохранить местоположение каретки и добавить к этой позиции, тогда я все готов ... Я думаю:)

9 голосов
/ 26 августа 2010

Прослушайте событие вставки и установите прослушиватель события keyup. При включении keyup сохраните значение и удалите прослушиватель событий keyup.

$('.inputTextArea').bind('paste', function (e){
    $(e.target).keyup(getInput);
});
function getInput(e){
    var inputText = $(e.target).val();
    $(e.target).unbind('keyup');
}
9 голосов
/ 26 марта 2009

Хмм ... Я думаю , вы можете использовать e.clipboardData, чтобы перехватить вставляемые данные Если это не удастся, посмотрите здесь .

$(this).live("paste", function(e) {
    alert(e.clipboardData); // [object Clipboard]
});
6 голосов
/ 26 марта 2009

Это приближается к тому, что вы могли бы хотеть.

function sanitize(s) {
  return s.replace(/\bfoo\b/g, "~"); 
};

$(function() {
 $(":text, textarea").bind("input paste", function(e) {
   try {
     clipboardData.setData("text",
       sanitize(clipboardData.getData("text"))
     );
   } catch (e) {
     $(this).val( sanitize( $(this).val() ) );
   }
 });
});

Обратите внимание, что когда объект clipboardData не найден (в браузерах, отличных от IE), в настоящее время вы получаете полное значение элемента + значение буфера обмена.

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

5 голосов
/ 21 февраля 2017
$("#textboxid").on('input propertychange', function () {
    //perform operation
        });

Будет нормально работать.

5 голосов
/ 07 декабря 2014

Этот код работает для меня, либо вставка правой кнопкой мыши, либо прямое копирование вставки

   $('.textbox').on('paste input propertychange', function (e) {
        $(this).val( $(this).val().replace(/[^0-9.]/g, '') );
    })

Когда я вставляю Section 1: Labour Cost, в текстовом поле оно становится 1.

Чтобы разрешить только значение с плавающей точкой, я использую этот код

 //only decimal
    $('.textbox').keypress(function(e) {
        if(e.which == 46 && $(this).val().indexOf('.') != -1) {
            e.preventDefault();
        } 
       if (e.which == 8 || e.which == 46) {
            return true;
       } else if ( e.which < 48 || e.which > 57) {
            e.preventDefault();
      }
    });
5 голосов
/ 07 октября 2014
 $('').bind('input propertychange', function() {....});                      

Это будет работать для события вставки мыши.

...