// Asigno el mismo evento a todos los botones
for (elemento of document.getElementsByTagName("button")) {
elemento.addEventListener("click", operacion);
}
function operacion() {
let operacion=this.innerHTML;
let [numero1, numero2] = obtenerNumeros();
let resultado=0;
switch(operacion){
case "+": resultado=numero1 + numero2;break;
case "-": resultado=numero1 - numero2;break;
case "*": resultado=numero1 * numero2;break;
case "/": resultado=numero1 / numero2;break;
}
// Muestro el valor
ponerNumero(resultado);
}
// Interacción con el HTML
function obtenerNumeros() {
let numero1 = document.getElementById("numero1");
let numero2 = document.getElementById("numero2");
return [Number(numero1.value), Number(numero2.value)];
}
function ponerNumero(numero) {
let resultado = document.getElementById("resultado");
resultado.value = numero;
}
Calculadora refactorizada (versión 3)
// Asignación de los eventos
document.getElementById("suma").addEventListener("click", sumar);
document.getElementById("resta").addEventListener("click", restar);
document.getElementById("multiplicacion").addEventListener("click", multiplicar);
document.getElementById("division").addEventListener("click", dividir);
// Funciones que implementan la lógica
function sumar() {
// Obtengo los valores
let [numero1, numero2] = obtenerNumeros();
// Los sumo
let suma = numero1 + numero2;
// Muestro el valor
ponerNumero(suma);
}
function restar() {
// Obtengo los valores
let [numero1, numero2] = obtenerNumeros(); // Los sumo
let resta = numero1 - numero2;
// Muestro el valor
ponerNumero(resta);
}
function multiplicar() {
// Obtengo los valores
let [numero1, numero2] = obtenerNumeros(); // Los sumo
let multiplicacion = numero1 * numero2;
// Muestro el valor
ponerNumero(multiplicacion);
}
function dividir() {
// Obtengo los valores
let [numero1, numero2] = obtenerNumeros(); // Los sumo
let division = numero1 / numero2;
// Muestro el valor
ponerNumero(division);
}
function obtenerNumeros() {
let numero1 = document.getElementById("numero1");
let numero2 = document.getElementById("numero2");
return [Number(numero1.value), Number(numero2.value)];
}
function ponerNumero(numero) {
let resultado = document.getElementById("resultado");
resultado.value = numero;
}
Calculadora refactorizada (versión 2)
// Asignación de los eventos
document.getElementById("suma").addEventListener("click", sumar);
document.getElementById("resta").addEventListener("click", restar);
document.getElementById("multiplicacion").addEventListener("click", multiplicar);
document.getElementById("division").addEventListener("click", dividir);
// Funciones que implementan la lógica
function sumar() {
// Obtengo los valores
let numero1 = document.getElementById("numero1");
let numero2 = document.getElementById("numero2");
// Los sumo
let suma = Number(numero1.value) + Number(numero2.value);
// Muestro el valor
let resultado = document.getElementById("resultado");
resultado.value = suma;
}
function restar () {
// Obtengo los valores
let numero1 = document.getElementById("numero1");
let numero2 = document.getElementById("numero2");
// Los sumo
let suma = Number(numero1.value) - Number(numero2.value);
// Muestro el valor
let resultado = document.getElementById("resultado");
resultado.value = suma;
}
function multiplicar () {
// Obtengo los valores
let numero1 = document.getElementById("numero1");
let numero2 = document.getElementById("numero2");
// Los sumo
let suma = Number(numero1.value) * Number(numero2.value);
// Muestro el valor
let resultado = document.getElementById("resultado");
resultado.value = suma;
}
function dividir() {
// Obtengo los valores
let numero1 = document.getElementById("numero1");
let numero2 = document.getElementById("numero2");
// Los sumo
let suma = Number(numero1.value) / Number(numero2.value);
// Muestro el valor
let resultado = document.getElementById("resultado");
resultado.value = suma;
}
Calculadora solución 1
<h1>Calculadora</h1>
<input type="number" id="numero1">
<button id="suma">+</button>
<button id="resta">-</button>
<button id="multiplicacion">*</button>
<button id="division">/</button>
<input type="number" id="numero2">
=
<input type="number" id="resultado">
<script src="js/script.js"></script>
// Vamos a hacer la suma
// 1.- Establecer el algoritmo (la receta)
// 2.- Comprobar el programa
// 3.- Refactorizar (mejorar)
// Cuando pulsen la suma se suman los dos numeros y se muestran en el resultado
// a) Saber como hacer que cuando pulsen un botón mi programa haga algo
// Añadiendo un evento al botón
// b) Saber coger el valor de una caja de texto
// Obtener el elemento y con 'value'
// c) Saber sumar dos números
// con +
// d) Saber cambiar el valor de una caja de texto
// obtener el elemento y usar el value
// Al pulsar el botón obtener los dos valores, sumarlos y ponerlos en la caja de resultado
let suma=document.getElementById("suma");
suma.onclick=function(){
// Obtengo los valores
let numero1=document.getElementById("numero1");
let numero2=document.getElementById("numero2");
// Los sumo
let suma=Number(numero1.value)+Number(numero2.value);
// Muestro el valor
let resultado=document.getElementById("resultado");
resultado.value=suma;
}
let resta=document.getElementById("resta");
resta.onclick=function(){
// Obtengo los valores
let numero1=document.getElementById("numero1");
let numero2=document.getElementById("numero2");
// Los sumo
let suma=Number(numero1.value)-Number(numero2.value);
// Muestro el valor
let resultado=document.getElementById("resultado");
resultado.value=suma;
}
let multiplicacion=document.getElementById("multiplicacion");
multiplicacion.onclick=function(){
// Obtengo los valores
let numero1=document.getElementById("numero1");
let numero2=document.getElementById("numero2");
// Los sumo
let suma=Number(numero1.value)*Number(numero2.value);
// Muestro el valor
let resultado=document.getElementById("resultado");
resultado.value=suma;
}
let division=document.getElementById("division");
division.onclick=function(){
// Obtengo los valores
let numero1=document.getElementById("numero1");
let numero2=document.getElementById("numero2");
// Los sumo
let suma=Number(numero1.value)/Number(numero2.value);
// Muestro el valor
let resultado=document.getElementById("resultado");
resultado.value=suma;
}
Teclado
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<input id="nombre" name="nombre">
<script src="js/teclado.js"></script>
</body>
</html>
let caja = document.getElementById("nombre");
// Se activa al pulsar la tecla
caja.onkeydown = function (evt) {
console.log(evt);
// No permite la pulsación de la letra 'A'
if (evt.key == "a") {
return false; // Cancela el evento, o sea que se carga la pulsación de la tecla
}
}
// Al levantar la tecla
caja.onkeyup = function (evt) {
console.log(evt);
}
// Cuando el elemento tiene el foco
caja.onfocus=function(evt){
console.log("Cogemos el foco");
this.style.backgroundColor="Yellow";
}
// Cuando el elemento pierde el foco
caja.onblur=function(evt){
console.log("Perdemos el foco");
this.style.backgroundColor="White";
}
// Cuando cambia el valor y salimos del elemento
caja.onchange=function(evt){
console.log(evt);
}
// Cuando cambia el valor sin salir del elemento
caja.oninput=function(evt){
console.log(evt);
}
Ejemplos eventos
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="css/styles.css">
</head>
<body>
<div id="test"></div>
<script src="js/mouse.js"></script>
</body>
</html>
#test{
height: 200px;
width: 200px;
background-color: chartreuse;
}
let caja=document.getElementById("test");
caja.onclick=function(evt){
console.log("Has pinchado");
}
Eventos intro
<button id="pinchar">Pínchame</button>
<button id="otro">Pínchame también</button>
<button id="otromas">Pínchame de nuevo</button>
// Eventos. Primero capturo el elemento
let boton=document.getElementById("pinchar");
let otro=document.getElementById("otro");
let otromas=document.getElementById("otromas");
// Asigno a sus eventos la función que quiero usar
// Una función que ya existe
boton.onclick=saludar;
function saludar(){
alert("Hola");
}
// Una función definida en el momento
otro.onclick=function(){
alert("Hola que tal");
}
// Una función flecha
otromas.onclick=()=>{
alert("con función flecha")
}
Ejemplo JS
<p>Esto es una prueba</p>
<input type="text" size="20" value="Hola" id="nombre" name="nombre"/>
<p id="resultado"></p>
<script src="js/prueba.js"></script>
let tabla = "";
// Creo una cadena con la tabla de multiplicar
for (let i = 1; i <= 10; i++) {
tabla += i + " x 5 = " + (i * 5) + "<br/>"
}
// Cambio el párrafo para que tenga esa cadena
document.getElementById("resultado").innerHTML = tabla;
Maneras de seleccionar elementos del DOM en JS
// La instrucción más usada para obtener un elemento determinado del DOM
let caja=document.getElementById("nombre");
caja.style.background="red";
console.log(caja.placeholder);
// Queryselector nos busca el primer elemento que coincide con el selector css
// Busco por etiqueta (tag) textarea
let texto=document.querySelector("textarea");
console.log(texto.innerHTML);
// Busco por id
let caja2=document.querySelector("#apellido");
console.log(caja2);
// Buscando por clase
let caja3=document.querySelector(".prueba");
console.log(caja3);
caja3.value="Pepe";
// Todos los elementos que cumplen el selector css
// Devuelve un array que podemos recorrer
let textos=document.querySelectorAll("textarea");
console.log(textos);
// Obtengo todos elementos que tienen una etiqueta (tag) determinado
let cajas=document.getElementsByTagName("input");
console.log(cajas);
// Obtengo todos los elementos que son de una determinada clase
let porClase=document.getElementsByClassName("prueba");
console.log(porClase);
Ejemplo HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form method="get" action="#">
<label for="nombre">Introduce el nombre</label>
<input type="text" id="nombre" maxlength="5" size="10" name="nombre" placeholder="Introduce tu nombre" />
<label for="apellido">Introduce el apellido</label>
<input type="text" size="30" id="apellido" name="apellido" value="Apellido" />
<br />
<fieldset>
<legend>Datos del curso</legend>
<label for="curso">Escoge un curso</label>
<input type="radio" id="JS" name="curso" value="JS" checked>
<label for="JS">JS</label>
<input type="radio" id="Java" name="curso" value="Java">
<label for="Java">Java</label>
<input type="radio" id="CSharp" name="curso" value="C#">
<label for="CSharp">C#</label>
<br />
<input type="checkbox" id="beca" name="beca" value="beca">
<label for="beca">¿Tienes beca?</label>
</fieldset>
<input type="color" name="password">
<select id="aula" name="aula">
<optgroup label="Edificio 1"></optgroup>
<option value="1">Aula 1</option>
<option value="2">Aula 2</option>
<option value="3">Aula 3</option>
<optgroup label="Claustro"></optgroup>
<option value="4">Sala de actos</option>
</select>
<input list="profesores" name="profesor" class="prueba">
<textarea name="contacto" id="contacto" cols="30" rows="10">contenidp</textarea>
<textarea id="mensaje" name="mensaje" rows="10" placeholder="Mensaje"></textarea>
<input type="button" value="Botón">
<input list="profesores" name="profesor_auxiliar">
<button>B<b>oo</b>otón</button>
<datalist id="profesores">
<option value="Ana Pi"></option>
<option value="Eva Buj"></option>
<option value="Luis Pérez"></option>
</datalist>
</form>
<script src="js/script.js"></script>
</body>
</html>