2012-02-29 8 views
24

tengo problemas para controlar un texto pegado en mi entrada:jQuery cómo obtener el contenido pegado

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

console.log muestra:

default 

Cómo catch el texto pegado y consigo ¿listo para usar?

+1

Hay una solución ya [jQuery entrada de pasta de captura] [1] pero eso no me parece muy buena [1]: http : //stackoverflow.com/questions/686995/jquery-catch-paste-input – kingpin

+0

¿Por qué va esto como comentario? – kingpin

Respuesta

31

navegadores modernos soportan ahora el evento input, que se dispara después de que el contenido se ha pegado

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

Al pegar a una entrada del evento paste se dispara antes de que el valor no tiene tiempo para actualizar.
Una manera de resolver esto es aplazar el ir a buscar el valor hasta que la entrada ha tenido tiempo para actualizar:

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

También existe la posibilidad de obtener los datos directamente desde el portapapeles en lugar de partir del valor de los insumos, al acceder a event.clipboardData, sin embargo, esa técnica es experimental, no se admite en todos los navegadores, y en mi opinión es más hacky que usar el evento input, o incluso un tiempo de espera simple.

+1

¿Por qué hizo que el tiempo de espera fuera de 100 milisegundos, en lugar de 0? – user2867288

+3

@ user2867288 - 4 años después, no tengo idea de por qué, acabo de hacerlo? – adeneo

+0

Solo me preguntaba si fue porque no funcionaba en algunos navegadores, de lo contrario (IE), porque lo ideal es que la mayoría de la gente no quiera agregar retrasos innecesarios en su aplicación web. – user2867288

-3

Prueba esto o la adición de un tiempo de espera demasiado:

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

La respuesta aceptada es en realidad hacky y feo, parece estar muy a menudo sugerido para el evento pasta sobre stackoverflow. Creo que una mejor manera de hacerlo es this

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

Esto no funciona en IE 9 para mí, pero sí el método 'setTimeout'. – BateTech

+3

window.clipboardData.getData ("Texto") <- IE9 equivalente a lo anterior. –

+0

@toddv, agradable. – cateyes

Cuestiones relacionadas