2012-02-29 4 views
24

У меня есть небольшие проблемы, ловя вставленный текст в мой вход:JQuery как получить вставленное содержание

<input type="text" id="myid" val="default"> 
$('#myid').on('paste',function(){ 
     console.log($('#myid').val()); 
}); 

console.log показывает:

default 

Как catch вставленный текст и получить готов использовать?

+1

Существует решение уже [JQuery вход задвижка паста] [1], но это мне кажется не очень хорошо один [1]: HTTP : //stackoverflow.com/questions/686995/jquery-catch-paste-input – kingpin

+0

Почему это происходит как комментарий ??? – kingpin

ответ

31

Современных браузеры теперь поддерживают input события, которое будет срабатывать после того, как содержание было вставило

$('#myid').on('input', function() { 
    console.log($('#myid').val()); 
}); 

При вставке к вводу paste события вызывается прежде, чем значение имеет время для обновления.
Одним из способов решения этой проблемы является отложить выборку значения, пока вход не успел обновить:

$('#myid').on('paste', function() { 
    setTimeout(function() { 
     console.log($('#myid').val()); 
    }, 100); 
}); 

Там также возможность получения данных непосредственно из буфера обмена, а не от значения входов, путем доступа к event.clipboardData, однако эта методика экспериментальна, не поддерживается во всех браузерах и, на мой взгляд, более хакерская, чем использование события input, или даже простой тайм-аут.

+1

Почему вы сделали тайм-аут 100 миллисекунд вместо 0? – user2867288

+3

@ user2867288 - 4 года спустя, я понятия не имею, почему, я просто сделал? – adeneo

+0

Просто интересно, было ли это потому, что это не работало в некоторых браузерах, в противном случае (IE), потому что в идеале большинство людей не захотели бы добавлять лишние задержки в свое веб-приложение. – user2867288

-3

Попробуйте это или добавить таймаут, тоже:

$('#myid').on('paste',function(){ 
      console.log(this.value); 
    }); 
41

Принятая Ответ на самом деле Hacky и некрасиво, кажется, предложил довольно часто для случая пасты на StackOverflow. Я думаю, что лучший способ сделать это this

$('#someInput').bind('paste', function(e) { 
    var data = e.originalEvent.clipboardData.getData('Text'); 
    //IE9 Equivalent ==> window.clipboardData.getData("Text"); 
}); 
+4

Это не работает в IE 9 для меня, но метод 'setTimeout'. – BateTech

+3

window.clipboardData.getData ("Текст") <- IE9, эквивалентный приведенному выше. –

+0

@toddv, хороший. – cateyes

Смежные вопросы