Acerca de Scriptia
Scriptia forma parte del PDM de Choan C. Gálvez, desarrollador web residente en Barcelona. Scriptia pretende mejorar la calidad de la documentación acerca de javascript disponible en español.
Saltar a Anotaciones relacionadas
Algo que me han preguntado hoy:
Choan, cariño mío, guapetón de mi alma… tengo dos campos en un formulario y quiero que uno refleje los cambios en el otro… y controlando keypress no tengo el valor actualizado
Pues no, no lo tienes. Solución: controlar la pila de ejecución. El truco: usar un timeout para que el método que actualiza los valores se ejecute después de acabar con la gestión de eventos. Algo así:
// en el manejador del evento keypress
setTimeout(updateValue, 0); // <-- la clave está en el cero
Ahora bien, lo de recoger el valor actualizado basándonos en keypress no es suficiente, porque hay mil maneras de rellenar el campo sin pulsar una tecla (copipegar por menús, lectores de códigos de barras, yo-que-sés…)
Así que mi consejo es defenderse controlando también el evento blur. Lo pongo en términos de jQuery, suponiendo que el campo que controlamos lleva el identificador source y el de destino es conocido como destination.
(function($) {
var init_copy_values = function() {
$('#source').bind('keypress blur', function(e) {
if (e.type == 'keypress') setTimeout(updateValue, 0);
else updateValue();
});
},
updateValue = function() {
$('#destination').val($('#source').val());
};
$(init_copy_values);
}(jQuery));
Pues nada, ya está, un post sin insultar a nadie.
Scriptia forma parte del PDM de Choan C. Gálvez, desarrollador web residente en Barcelona. Scriptia pretende mejorar la calidad de la documentación acerca de javascript disponible en español.