2011-06-18 17 views
7

descubrí que al pegar texto (es decir Hello) utilizando el ratón, la siguiente función generará un emergente vacío:¿Es posible obtener texto pegado sin utilizar la función setTimeout()?

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

La cosa es, cuando se activa el evento onpaste, el texto no es pero en realidad pegado en el campo de entrada (al menos esa es mi suposición). Por lo que cambiar 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 peguen al campo de entrada.

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

kkthxbai xon1c

+0

http://stackoverflow.com/a/19269040/530153 –

Respuesta

11

puede utilizar el evento oninput lugar, los navegadores modernos soportan este método

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

$('input').bind('input', function(e) { 
    console.log($(this).val()); 
}); 
+1

¿Cómo puedo verificar si la entrada fue un engrudo? – user3281466

0

probar esto para obtener los datos que se están pegadas: se necesita

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

El tiempo de espera para obtener el dom actualizado por lo que el valor es en realidad en el campo de entrada. también se podría utilizar el evento de cambio para comprobar si el cuadro de entrada se actualiza http://api.jquery.com/change

+3

Me estoy "indefinido" en la alerta, ¿podría darme un ejemplo? – Diego

1
$('input:text').bind('paste', function() { 
    alert($(this).val()); 
}); 
+0

Este código no funciona, porque el valor pegado aún no se estableció en la entrada. He probado usando Chrome. –

0

Pongo No creo que el código de abajo funcione en IE8 ya que el valor de entrada no cambia cuando se ejecuta la alerta().

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

en Firefox y Chrome, funciona bien.

Cuestiones relacionadas