javascript: error de función no definida pero no hay ningún error que cause esto

CorePress2024-01-24  10

He probado el siguiente JavaScript en las consolas de desarrollo de Chrome y Edge muchas veces y dice que todas las funciones no están definidas. Sin embargo, no me dice cuál es la causa de esto. Aquí está el código (creo que el error puede estar en toggleMenu ya que acabo de agregar esto). El sitio web es tactiletimes.org. También intenté poner const antes de la lista, pero esto solo genera un error de identificador inesperado

list = "<ul><li><a href="about">About Us</a></li><li><a href="subscribe">Subscribe for free</a></li><li><a href="issues.html">Issue Archive</a></li><li><a href="contribute">Contribute to Issue 4</a></li><li><a href="contact">Contact us</a></li><li><a href="#menu">View full menu</a></li></ul>";
  
  function clearCookies(){
    deleteAllCookies();
    document.getElementById("cookieButton").innerHTML = "Successfully cleared data"+document.cookie
  }

  function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0){ return c.substring(nameEQ.length,c.length)};
    }
    return null;
}
  
  function deleteAllCookies(){
    var cookies = document.cookie.split(";");

    for (var i = 0; i < cookies.length; i++) {
        var cookie = cookies[i];
        var eqPos = cookie.indexOf("=");
        var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;
        document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT";
    }
}

function changeBodyColor(color){
  document.cookie = "bgColor="+color;
  document.getElementById("footer").style.color = "yellow";  
  changeLinkColor("yellow")
  document.body.style.backgroundColor = color;
  if (color == "white"){
    document.body.style.color = "black";
    changeLinkColor("blue");
  }
  else if (color == "black"){
    document.body.style.color = "white";
  }
  else if (color == "yellow"){
    document.body.style.color = "black";
    changeLinkColor("blue");
    document.getElementById("footer").style.color = "red";
  }
  else if (color == "purple"){
    document.body.style.color = "white";  
  }
  else if (color == "blue"){
    document.body.style.color = "white";
    }
    else if (color == "green"){
    document.body.style.color = "black";  
  changeLinkColor("blue");
  document.getElementById("footer").style.color = "red";  
  }
  else if (color == "orange"){
    changeLinkColor("blue");
  }
  
  
}

function changeLinkColor(color){
  var links = document.getElementsByTagName("a");
  for (var i = 0; i < links.length; i++){
    links[i].style.color = color;
  }
  
  
}

function restoreBgColor(){
  if (!readCookie("bgColor") == null){
    changeBodyColor(readCookie(bgColor));
  }
}

function toggleMenu(){
  if (document.getElementById("topmenu").innerHTML != ""){
    document.getElementById("topmenu").innerHTML = "";
  }
else{
  document.getElementById("topmenu").innerHTML = list;
}
}

</script> ``` 

No sé por qué el <script> La etiqueta no se agregó a esta pregunta, pero sí la agregué a mi código

-LegendusMaximus

27 de marzo de 2021 a las 7:36

La lista está rompiendo el código debido al uso incorrecto de códigos dobles. Solucionalo primero y luego avísame si aparece el mismo error.

-Bulent

27 de marzo de 2021 a las 7:39

Gracias, parece haber resuelto el problema. Me pregunto por qué no se permiten comillas dobles en esta situación como otra pregunta sobre dobles ylas comillas simples hacen que parezca que se usaron en las mismas situaciones (como en Python)

-LegendusMaximus

27 de marzo de 2021 a las 7:51

Porque "<ul><li><a href=" es una cadena completa, todo lo que sigue es otra cosa.

-Bulent

27 de marzo de 2021 a las 8:09



------------------------------------

Fui a tactiletimes.org para ver el error en acción.

Esta línea lo hizo:

list = '<ul><li><a href="about">About Us</a></li><li><a href="subscribe">Subscribe for free</a></li><li><a href="issues.html">Issue Archive</a></li><li><a href="contribute">Contribute to Issue 4</a></li><li><a href="contact">Contact us</a></li><li><a href="#menu">View full menu</a></li></ul>'';

Simplemente retire la lcomillas simples (que no sirven de nada) y funciona.

var list = '<ul><li><a href="about">About Us</a></li><li><a href="subscribe">Subscribe for free</a></li><li><a href="issues.html">Issue Archive</a></li><li><a href="contribute">Contribute to Issue 4</a></li><li><a href="contact">Contact us</a></li><li><a href="#menu">View full menu</a></li></ul>';

Ahora sabes por qué tuviste el problema después de rehacer tus citas.



------------------------------------

El problema está en la variable de lista. Acabo de reemplazar el exterior " con un ' 😅

list = '<ul><li><a href="https://stackoverflow.com/questions/66828998/about">About Us</a></li><li><a href="https://stackoverflow.com/questions/66828998/subscribe">Subscribe for free</a></li><li><a href="https://stackoverflow.com/questions/66828998/issues.html">Issue Archive</a></li><li><a href="https://stackoverflow.com/questions/66828998/contribute">Contribute to Issue 4</a></li><li><a href="https://stackoverflow.com/questions/66828998/contact">Contact us</a></li><li><a href="">View full menu</a></li></ul>';

function clearCookies() {
  deleteAllCookies();
  document.getElementById("cookieButton").innerHTML = "Successfully cleared data" + document.cookie
}

function readCookie(name) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for (var i = 0; i < ca.length; i++) {
    var c = ca[i];
    while (c.charAt(0) == ' ') c = c.substring(1, c.length);
    if (c.indexOf(nameEQ) == 0) {
      return c.substring(nameEQ.length, c.length)
    };
  }
  return null;
}

function deleteAllCookies() {
  var cookies = document.cookie.split(";");

  for (var i = 0; i < cookies.length; i++) {
    var cookie = cookies[i];
    var eqPos = cookie.indexOf("=");
    var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;
    document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT";
  }
}

function changeBodyColor(color) {
  document.cookie = "bgColor=" + color;
  document.getElementById("footer").style.color = "yellow";
  changeLinkColor("yellow")
  document.body.style.backgroundColor = color;
  if (color == "white") {
    document.body.style.color = "black";
    changeLinkColor("blue");
  } else if (color == "black") {
    document.body.style.color = "white";
  } else if (color == "yellow") {
    document.body.style.color = "black";
    changeLinkColor("blue");
    document.getElementById("footer").style.color = "red";
  } else if (color == "purple") {
    document.body.style.color = "white";
  } else if (color == "blue") {
    document.body.style.color = "white";
  } else if (color == "green") {
    document.body.style.color = "black";
    changeLinkColor("blue");
    document.getElementById("footer").style.color = "red";
  } else if (color == "orange") {
    changeLinkColor("blue");
  }
}

function changeLinkColor(color) {
  var links = document.getElementsByTagName("a");
  for (var i = 0; i < links.length; i++) {
    links[i].style.color = color;
  }
}

function restoreBgColor() {
  if (!readCookie("bgColor") == null) {
    changeBodyColor(readCookie(bgColor));
  }
}

function toggleMenu() {
  if (document.getElementById("topmenu").innerHTML != "") {
    document.getElementById("topmenu").innerHTML = "";
  } else {
    document.getElementById("topmenu").innerHTML = list;
  }
}



------------------------------------

Corrige las comillas en la primera línea y elimina las tres comillas graves al final.

<script>
var list = '<ul><li><a href="about">About Us</a></li><li><a href="subscribe">Subscribe for free</a></li><li><a href="issues.html">Issue Archive</a></li><li><a href="contribute">Contribute to Issue 4</a></li><li><a href="contact">Contact us</a></li><li><a href="#menu">View full menu</a></li></ul>';

function clearCookies(){
    deleteAllCookies();
    document.getElementById("cookieButton").innerHTML = "Successfully cleared data"+document.cookie
}

function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0){ return c.substring(nameEQ.length,c.length)};
    }
    return null;
}

function deleteAllCookies(){
    var cookies = document.cookie.split(";");

    for (var i = 0; i < cookies.length; i++) {
        var cookie = cookies[i];
        var eqPos = cookie.indexOf("=");
        var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;
        document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT";
    }
}

function changeBodyColor(color){
    document.cookie = "bgColor="+color;
    document.getElementById("footer").style.color = "yellow";  
    changeLinkColor("yellow")
    document.body.style.backgroundColor = color;
    if (color == "white"){
        document.body.style.color = "black";
        changeLinkColor("blue");
    }
    else if (color == "black"){
        document.body.style.color = "white";
    }
    else if (color == "yellow"){
        document.body.style.color = "black";
        changeLinkColor("blue");
        document.getElementById("footer").style.color = "red";
    }
    else if (color == "purple"){
        document.body.style.color = "white";  
    }
    else if (color == "blue"){
        document.body.style.color = "white";
    }
    else if (color == "green"){
        document.body.style.color = "black";  
        changeLinkColor("blue");
        document.getElementById("footer").style.color = "red";  
    }
    else if (color == "orange"){
        changeLinkColor("blue");
    }
    
    
}

function changeLinkColor(color){
    var links = document.getElementsByTagName("a");
    for (var i = 0; i < links.length; i++){
        links[i].style.color = color;
    }
    
    
}

function restoreBgColor(){
    if (!readCookie("bgColor") == null){
        changeBodyColor(readCookie(bgColor));
    }
}

function toggleMenu(){
    if (document.getElementById("topmenu").innerHTML != ""){
        document.getElementById("topmenu").innerHTML = "";
    }
    else{
        document.getElementById("topmenu").innerHTML = list;
    }
}
</script>
Compártelo Seguir Respondido

27 de marzo de 2021 a las 7:56 am

sumeetbajra

sumeetbajra

16

1

1 insignia de bronce

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare