es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Accediendo a innerHTML en Javascript para addEventListener

Probé 2 piezas de código, una de ellas funcionó y la otra no, y no estoy seguro de por qué sucedió, ya que ambas piezas de código se ven similares para mí. Lo que quiero hacer es imprimir un texto diferente cada vez que un usuario hace clic en un botón. Primero, el código que no funcionó como quería y el resultado siempre era err y cada vez que hacía clic en él, ni el texto cambió ni la consola, excepto por el número junto a err que seguía aumentando.

function func1() {
    let x = document.getElementById("test1").innerHTML;
    if (x===""){
        x = "Primer clic";
        console.log("err");
    }
    else if (x==="Primer clic") {
        x = "Segundo clic";
        console.log("err2");
    }
    else {
        x = "Tercer clic";
    }
}

document.getElementById("click").addEventListener("click", func1);

Y la segunda pieza de código que funcionó perfectamente es:

function func1() {
    let x = document.getElementById("test1");
    if (x.innerHTML===""){
        x.innerHTML = "Primer clic";
        console.log("err");
    }
    else if (x.innerHTML==="Primer clic") {
        x.innerHTML = "Segundo clic";
        console.log("err2");
    }
    else {
        x.innerHTML = "Tercer clic";
    }
}

document.getElementById("click").addEventListener("click", func1);
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    En el primer fragmento de código, la variable ‘x’ se asigna al valor innerHTML del elemento con el id ‘test1’, pero el valor de ‘x’ nunca se actualiza. En cambio, se asigna un nuevo valor a ‘x’ cada vez que se llama a la función, pero este valor nunca se establece como innerHTML del elemento. Por lo tanto, aunque se ejecutan las declaraciones console.log, el texto en la página permanece igual.

    En contraste, en el segundo fragmento de código se asigna el elemento con id ‘test1’ a la variable ‘x’ y luego se actualiza la propiedad innerHTML de ‘x’ según el valor actual de la propiedad innerHTML. Esto significa que el texto en la página realmente cambia con cada clic y también se ejecutan las declaraciones console.log.

    La diferencia clave entre los dos fragmentos de código es que en el segundo fragmento, se manipula directamente la propiedad innerHTML del elemento, mientras que en el primer fragmento, el valor innerHTML se guarda como una variable separada y nunca se utiliza para actualizar el elemento.

Comments are closed.