【问题标题】:Function undefined error but no error causing this函数未定义错误,但没有导致此错误
【发布时间】:2021-06-23 23:51:38
【问题描述】:

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

【问题讨论】:

  • 我不知道为什么
  • list 因错误使用双码而破坏了代码。先修复它,然后让我知道你是否会遇到同样的错误。
  • 谢谢,看来问题已经解决了。我只是想知道为什么在这种情况下不允许使用双引号,因为另一个关于双引号和单引号的问题使它看起来就像它们在相同的情况下使用(比如在 Python 中)
  • 因为 "

标签: javascript html


【解决方案1】:

修正第一行的引号并删除末尾的三个反引号。

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

【讨论】:

    【解决方案2】:

    问题在于您的 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;
      }
    }

    【讨论】:

      【解决方案3】:

      我访问了 tactiletimes.org 以查看正在运行的错误。

      这一行做到了:

      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 后会出现问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-22
        • 2017-01-27
        相关资源
        最近更新 更多