HTML
Disponemos de tres botones.- El boton1 lanza un alert programado en el propio html.
- El botón 2 lanza la función cambiaColorA que está ya programada en el archivo js.
- El botón 3 lanza la función cambiaColorB y para activar este evento se requiere doble click
onclick
para doble click se usa ondblclick
. <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Eventos</title>
</head>
<body>
<h1>Manejando Eventos</h1>
<p>Presiona el botón para ver los cambios</p>
<p>
<button id="boton1" onclick="alert('Has pulsado el botón');">Púlsame</button>
</p>
<p>
<button id="boton2" onclick="cambiaColorA()">Púlsame a mi también</button>
</p>
<p>
<!--botón con doble click es: ondblclick-->
<button id="boton3" ondblclick="cambiaColorB()">Yo con doble click</button>
</p>
<hr>
<!--scripts-->
<script src="eventos1.js"></script>
</body>
</html>
JavaScript
No es obligatorio poner un return al finalizar una función de JavaScript que no devuelve nada, pero en ese caso si la ejecutamos nos responderá al final con
undefined
. Si deseamos evitar ese mensaje por consola podemos escribir como última línea de la función return true
y seguido de un punto y coma que en este caso es optativo. 'use strict'
//Eventos del ratón
var boton2=document.querySelector("#boton2");
function cambiaColorA(){
//vemos en la consola un contador que aumenta con cada pulsación
console.log("Ha sido pulsado");
boton2.style.background="pink";
return true; //si no se pone esto se verá un undefined
}
var boton3=document.querySelector("#boton3");
boton3.style.padding="10px";
boton3.style.border="1px solid #cdcdcd"; //gris
function cambiaColorB(){
console.log("El doble ha sido pulsado");
let bg=boton3.style.background;
console.log(bg);
if(bg=="green"){
boton3.style.background="red";
}else{
boton3.style.background="green";
}
return true;
}
En la imagen vemos la consola de Chrome y cómo va alternando entre color verde y rojo al pulsar el boton3 con doble click.
en Chrome |
Lo curioso es que este mismo código en Firefox se queda en color verde y nunca cambia a rojo. El motivo es que en Chrome el contenido de la propiedad
background
es simplemente un texto con el color red o green. Por el contrario en Firefox da más información: green none repeat scroll 0% 0%
.en Firefox |
Alternativa 1
Podemos crear una variable de control auxiliar que sea de tipo booleano y que alterne sus valorestrue
o false
. De esta forma sabremos qué color toca en cada momento. var boton3=document.querySelector("#boton3");
boton3.style.padding="10px";
boton3.style.border="1px solid #cdcdcd"; //gris
var aux=true; //variable auxiliar global
function cambiaColorB(){
console.log("El doble ha sido pulsado");
let bg=boton3.style.background;
console.log(bg);
if(aux){
boton3.style.background="red";
aux=!aux;
}else{
boton3.style.background="green";
aux=!aux;
}
return true;
}
Alternativa 2
Podemos obtener de la propiedadbackground
únicamnte el texto, con lo que estaríamos obteniendo exclusivamente el color que es lo que nos interesa. let bg=boton3.style.backgroundColor;
De esta forma, ahora si conseguimos en Fireforx únicamente el texto con el color.
ahora si funciona en Firefox |
Alternativa 3
Podemos usar la expresiónstr.includes("texto")
para ver si el string contiene cierto texto. if(bg.includes("green")){
}
en Firefox ahora si alterna el color |
No hay comentarios:
Publicar un comentario