Descubrí que al pegar texto (es decir, Hello) usando el mouse, la siguiente función arrojará una ventana emergente vacía:

$('input:text').onpaste = function()
{
    alert($('input:text').val());
});

La cuestión es que, cuando se activa el evento onpaste, el texto aún no se pega en el campo de entrada (al menos eso supongo). Entonces cambiando la función a:

$('input:text').onpaste = function()
{
    setTimeout(function()
    {
        alert($('input:text').val()
    }, 100);
}

Da un resultado correcto al mostrar una ventana emergente con el texto Hello cuando se pega en el campo de entrada.

Ahora mi pregunta: ¿hay alguna posibilidad de atrapar el texto pegado sin usar la función setTimeout()? Esta solución alternativa parece bastante sucia, así que me encantaría no tener que usarla.

Kkthxbai xon1c

7
xon1c 18 jun. 2011 a las 23:11

4 respuestas

La mejor respuesta

Puede utilizar el evento oninput en su lugar, los navegadores modernos admiten este método

http://jsfiddle.net/pxfunc/KDLjf/

$('input').bind('input', function(e) {
    console.log($(this).val());
}); 
11
MikeM 18 jun. 2011 a las 19:22

No creo que el siguiente código funcione en IE8 ya que el valor de entrada no cambia cuando se ejecuta alert ().

 $('input').bind('input paste', function(e) {
     alert($(this).val());
 }); 

En Firefox y Chrome, funciona bien.

0
YuC 27 dic. 2012 a las 08:04

Intente esto para obtener los datos que se están pegando:

$("input:text").bind('paste', function(e) {
     var text = e.event;
     alert(text);
});

El tiempo de espera es necesario para actualizar el dom para que el valor esté realmente en el campo de entrada. también puede usar el evento change para verificar si el cuadro de entrada está actualizado http://api.jquery.com/change

0
GeertvdC 18 jun. 2011 a las 19:25
$('input:text').bind('paste', function() { 
    alert($(this).val());
});
1
Noxt 18 jun. 2011 a las 19:21