Eventos Change, Input, Cut, Copy, Paste
Eventos Change, Input, Cut, Copy, Paste
ES
24 de octubre de 2022
Evento: change
El evento change se activa cuando el elemento finaliza un cambio.
Para ingreso de texto significa que el evento ocurre cuando se pierde foco en el elemento.
Por ejemplo, mientras estamos escribiendo en el siguiente cuadro de texto, no hay evento. Pero cuando
movemos el focus (enfoque) a otro lado, por ejemplo hacemos click en un botón, entonces ocurre el evento
change :
1 <input type="text" onchange="alert(this.value)">
2 <input type="button" value="Button">
Button
1 <select onchange="alert(this.value)">
2 <option value="">Select something</option>
3 <option value="1">Option 1</option>
4 <option value="2">Option 2</option>
5 <option value="3">Option 3</option>
6 </select>
Select something
Evento: input
El evento input se dispara cada vez que un valor es modificado por el usuario.
A diferencia de los eventos de teclado, ocurre con el cambio a cualquier valor, incluso aquellos que no
involucran acciones de teclado: copiar/pegar con el mouse o usar reconocimiento de voz para dictar texto.
Por ejemplo:
1 <input type="text" id="input"> oninput: <span id="result"></span>
2 <script>
3 input.oninput = function() {
4 result.innerHTML = input.value;
5 };
6 </script>
oninput:
Si queremos manejar cualquier modificación en un <input> entonces este evento es la mejor opción.
Por otro lado, el evento input no se activa con entradas del teclado u otras acciones que no involucren
modificar un valor, por ejemplo presionar las flechas de dirección ⇦ ⇨ mientras se está en el input.
También podemos usar event.preventDefault() para cancelar la acción y que nada sea cortado/
copiado/pegado.
El siguiente código también evita todo evento cut/copy/paste y muestra qué es los que estamos
intentando cortar/copiar/pegar:
1 <input type="text" id="input">
2 <script>
3 input.onpaste = function(event) {
4 alert("paste: " + event.clipboardData.getData('text/plain'));
5 event.preventDefault();
6 };
7
8 input.oncut = input.oncopy = function(event) {
9 alert(event.type + '-' + document.getSelection());
10 event.preventDefault();
11 };
12 </script>
Nota que dentro de los manejadores cut y copy , llamar a event.clipboardData.getData(...)
devuelve un string vacío. Esto es porque el dato no está en el portapapeles aún. Y si usamos
event.preventDefault() no será copiado en absoluto.
Por ello el ejemplo arriba usa document.getSelection() para obtener el texto seleccionado. Puedes
encontrar más detalles acerca de selección en el artículo Selection y Range.
No solo es posible copiar/pegar texto, sino cualquier cosa. Por ejemplo, podemos copiar un archivo en el
gestor de archivos del SO y pegarlo.
Hay además una API asincrónica adicional para acceso al portapapeles: navigator.clipboard . Más en
la especificación Clipboard API and events, no soportado en Firefox.
Restricciones de seguridad
El portapapeles es algo a nivel “global” del SO. Un usuario puede alternar entre ventanas, copiar y pegar
diferentes cosas, y el navegador no debería ver todo eso.
Por ello la mayoría de los navegadores dan acceso al portapapeles únicamente bajo determinadas acciones
del usuario, como copiar y pegar.
Está prohibido generar eventos “personalizados” del portapapeles con dispatchEvent en todos los
navegadores excepto Firefox. Incluso si logramos enviar tal evento, la especificación establece que tal evento
“sintético” no debe brindar acceso al portapapeles.
Por otro lado, navigator.clipboard es una API más reciente, pensada para el uso en cualquier contexto. Esta
pide autorización al usuario cuando la necesita.
Resumen
Eventos de modificación de datos:
Un valor fue
change En ingreso de texto, se dispara cuando el elemento pierde el foco
cambiado.
Cada cambio de
input Se dispara de inmediato con cada cambio, a diferencia de change .
entrada de texto
Calculadora de depósito
importancia: 5
Crea una interfaz que permita ingresar una suma de depósito bancario y porcentaje, luego calcula cuánto
será después de un periodo de tiempo determinado.
Calculadora de depósito.
Depósito inicial 10000
Inicial: Final:
10000 10500
La fórmula es:
solución
Comentarios
● Si tiene sugerencias sobre qué mejorar, por favor enviar una propuesta de GitHub o una solicitud
de extracción en lugar de comentar.
● Si no puede entender algo en el artículo, por favor explique.
● Para insertar algunas palabras de código, use la etiqueta <code> , para varias líneas –
envolverlas en la etiqueta <pre> , para más de 10 líneas – utilice una entorno controlado
(sandbox) (plnkr, jsbin, codepen…)