首页 > 解决方案 > 函数未定义错误,但没有导致此错误

问题描述

我在 Chrome 和 Edge 开发控制台中测试了以下 JavaScript 很多次,它说所有函数都是未定义的。但是,它并没有告诉我这是什么原因。这是代码(我认为错误可能在toggleMenu中,因为我刚刚添加了这个)。网站是 tactiletimes.org。我也尝试将 const 放在 list 之前,但这只会引发意外的识别器错误

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> ``` 

标签: javascripthtml

解决方案


我去了 tactiletimes.org 来查看这个 bug。

这条线做到了:

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>'';

只需删除最后一个单引号(没有用),它就可以了。

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>';

现在您知道为什么在重做 qoutes 后会出现问题。


推荐阅读