Javascript 当我将css和js分离成文件并将它们链接回主html时,任务列表的工作方式就不同了

Javascript 当我将css和js分离成文件并将它们链接回主html时,任务列表的工作方式就不同了,javascript,html,css,Javascript,Html,Css,在这个问题中,当一切都在一起时,我的html工作得很好,如图所示,但是当我将js和css的src文件链接到该文件,而不是在我的主html中有太多代码时,它在这里无法正常工作 -原始html <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1"> <style>

在这个问题中,当一切都在一起时,我的html工作得很好,如图所示,但是当我将js和css的src文件链接到该文件,而不是在我的主html中有太多代码时,它在这里无法正常工作

-原始html

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body {
  margin: 0;
  min-width: 250px;
}

/* Include the padding and border in an element's total width and height */
* {
  box-sizing: border-box;
}

/* Remove margins and padding from the list */
ul {
  margin: 0;
  padding: 0;
}

/* Style the list items */
 ul li {
  cursor: pointer;
  position: relative;
  padding: 12px 8px 12px 40px;
  list-style-type: none;
  background: #eee;
  font-size: 18px;
  transition: 0.2s;
  
  /* make the list items unselectable */
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}

/* Set all odd list items to a different color (zebra-stripes) */
 ul li:nth-child(odd) {
  background: #f9f9f9;
}

/* Darker background-color on hover */
ul li:hover {
  background: #ddd;
}

/* When clicked on, add a background color and strike out text */
ul li.checked {
  background: #888;
  color: #fff;
  text-decoration: line-through;
}

/* Add a "checked" mark when clicked on */
ul li.checked::before {
  content: '';
  position: absolute;
  border-color: #fff;
  border-style: solid;
  border-width: 0 2px 2px 0;
  top: 10px;
  left: 16px;
  transform: rotate(45deg);
  height: 15px;
  width: 7px;
}

/* Style the close button */
.close {
  position: absolute;
  right: 0;
  top: 0;
  padding: 12px 16px 12px 16px;
}

.close:hover {
  background-color: #f44336;
  color: white;
}

/* Style the header */
.header {
  background-color: #f4a3dc;
  padding: 30px 40px;
  color: white;
  text-align: center;
}

/* Clear floats after the header */
.header:after {
  content: "";
  display: table;
  clear: both;
}

/* Style the input */
input {
  margin: 0;
  border: none;
  border-radius: 0;
  width: 75%;
  padding: 10px;
  float: left;
  font-size: 16px;
}

/* Style the "Add" button */
.addBtn {
  padding: 50px;
  width: 15%;
  background: #d9d9d9;
  color: #555;
  float: left;
  text-align: center;
  font-size: 16px;
  cursor: pointer;
  transition: 0.3s;
  border-radius: 0;
}

.addBtn:hover {
  background-color: #bbb;
}
</style>
</head>
<body>

<div id="myDIV" class="header">
  <h2 style="margin:5px">My To Do List</h2>
  <input type="text" id="myInput" placeholder="Title...">
  <input type="number" id="myInput1" placeholder="Insert Priority Number (1 being lowest to 3 being highest) ">
  <span onclick="newElement()" class="addBtn">Add</span>
</div>

<ul id="myUL">

</ul>

<script>
// Create a "close" button and append it to each list item
var myNodelist = document.getElementsByTagName("LI");
var i;
for (i = 0; i < myNodelist.length; i++) {
  var span = document.createElement("SPAN");
  var txt = document.createTextNode("\u00D7");
  span.className = "close";
  span.appendChild(txt);
  myNodelist[i].appendChild(span);
}

// Click on a close button to hide the current list item
var close = document.getElementsByClassName("close");
var i;
for (i = 0; i < close.length; i++) {
  close[i].onclick = function() {
    var div = this.parentElement;
    div.style.display = "none";
  }
}

// Add a "checked" symbol when clicking on a list item
var list = document.querySelector('ul');
list.addEventListener('click', function(ev) {
  if (ev.target.tagName === 'LI') {
    ev.target.classList.toggle('checked');
  }
}, false);

// Create a new list item when clicking on the "Add" button
function newElement() {
  var li = document.createElement("li");
  var inputValue = document.getElementById("myInput").value;
  var inputValue1 = document.getElementById("myInput1").value;
  var t = document.createTextNode(inputValue);
     var s = document.createTextNode(inputValue1);
  li.appendChild(t);
  
  if (inputValue1== 1){
 li.style.backgroundColor = "#8cf458";
 
 
  }
  else if (inputValue1==2){
   li.style.backgroundColor = "#faed52";
    
  }
  else if (inputValue1==3){
     li.style.backgroundColor = "#ff5c5c";
  
  }
 if(inputValue1 <1){
 
  alert("Only numbers between 1-3!!");
  }
   if(inputValue1 >3){
 
  alert("Only numbers between 1-3!!");
  }
  if (inputValue === '') {
    alert("You must write something!");
  } else {
    document.getElementById("myUL").appendChild(li);
  }
  document.getElementById("myInput").value = "";

  var span = document.createElement("SPAN");
  var txt = document.createTextNode("\u00D7");
  span.className = "close";
  span.appendChild(txt);
  li.appendChild(span);

  for (i = 0; i < close.length; i++) {
    close[i].onclick = function() {
      var div = this.parentElement;
      div.style.display = "none";
    }
  }
}
</script>

</body>
</html>
-js文件

document.addEventListener("DOMContentLoaded", (){
var myNodelist = document.getElementsByTagName("LI");
var i;
for (i = 0; i < myNodelist.length; i++) {
  var span = document.createElement("SPAN");
  var txt = document.createTextNode("\u00D7");
  span.className = "close";
  span.appendChild(txt);
  myNodelist[i].appendChild(span);
}

    // Click on a close button to hide the current list item
    var close = document.getElementsByClassName("close");
    var i;
    for (i = 0; i < close.length; i++) {
      close[i].onclick = function() {
        var div = this.parentElement;
        div.style.display = "none";
      }
    }
    
    // Add a "checked" symbol when clicking on a list item
    var list = document.querySelector('ul');
    list.addEventListener('click', function(ev) {
      if (ev.target.tagName === 'LI') {
        ev.target.classList.toggle('checked');
      }
    }, false);
    
    // Create a new list item when clicking on the "Add" button
    function newElement() {
      var li = document.createElement("li");
      var inputValue = document.getElementById("myInput").value;
      var inputValue1 = document.getElementById("myInput1").value;
      var t = document.createTextNode(inputValue);
         var s = document.createTextNode(inputValue1);
      li.appendChild(t);
      
      if (inputValue1== 1){
     li.style.backgroundColor = "#8cf458";
     
     
      }
      else if (inputValue1==2){
       li.style.backgroundColor = "#faed52";
        
      }
      else if (inputValue1==3){
         li.style.backgroundColor = "#ff5c5c";
      
      }
     if(inputValue1 <1){
     
      alert("Only numbers between 1-3!!");
      }
       if(inputValue1 >3){
     
      alert("Only numbers between 1-3!!");
      }
      if (inputValue === '') {
        alert("You must write something!");
      } else {
        document.getElementById("myUL").appendChild(li);
      }
      document.getElementById("myInput").value = "";
    
      var span = document.createElement("SPAN");
      var txt = document.createTextNode("\u00D7");
      span.className = "close";
      span.appendChild(txt);
      li.appendChild(span);
    
      for (i = 0; i < close.length; i++) {
        close[i].onclick = function() {
          var div = this.parentElement;
          div.style.display = "none";
        }
      }
    }
document.addEventListener(“DOMContentLoaded”,(){
var myNodelist=document.getElementsByTagName(“LI”);
var i;
对于(i=0;i

}在运行的版本中,JavaScript位于HTML之后。这确保了JS不会开始运行并尝试引用HTML元素,直到它们被加载

在不起作用的版本中,JavaScript从一开始就开始加载,因此还没有找到HTML元素

<script src="tasklist.js"></script>


最后,就在之前,应该解决这个问题。

在运行的版本中,JavaScript位于HTML之后。这确保了JS在加载HTML元素之前不会开始运行并尝试引用HTML元素

在不起作用的版本中,JavaScript从一开始就开始加载,因此还没有找到HTML元素

<script src="tasklist.js"></script>


最后,就在html文件之前,应该解决这个问题。

一件事,在新链接中的
.css
文件名后面有一个空格。除此之外,新文件是否与html文件位于同一目录中,或者新文件是否位于子目录中,例如
js
css
?此外,请尝试清除浏览器缓存,以查看是否存在此问题1.将
脚本
标记放在正文末尾或添加
延迟
属性。2.将所有JS代码包装在
文档中。addEventListener(“DOMContentLoaded”,()=>{…})
@gugadev如中所述,只是将其作为一切的开头?我的意思是没有添加任何代码,只是将其放在一个括号中,并用该括号将其关闭在我的js代码的末尾?对于脚本标记,我对其在正文末尾的位置感到困惑?js问题很可能是这些代码都是在DOM之前执行的因此,
querySelector
可能会因此返回
null
。这就是为什么需要将代码放入
DOMContentLoaded
侦听器中,以确保在DOM完全加载后执行代码。另一种方法是在
脚本
标记中使用
defer
属性。为什么贡告诉浏览器:“加载文档后执行脚本代码”@gugadev所以我尝试将DomContentLoaded添加到js文件中,我用括号结束了它的结尾,但是当我回到我的HTML时,当我添加任务时,它不会提交任何内容?对于延迟/脚本标记,github不允许js文件中有HTML标记,我感谢你能提供的所有帮助,尽管我在这个问题上遇到了难题ng,新链接中的
.css
文件名后面有一个空格。除此之外,新文件是否与html文件位于同一目录中,或者新文件是否位于子目录中,如
js
css
?此外,请尝试清除浏览器缓存以查看这是否有任何区别。1.将
脚本
标记放在结束正文或添加
defer
属性。2.将所有JS代码包装在
文档中。addEventListener(“DOMContentLoaded”,()=>{…})
@gugadev如中所述,只是将其作为一切的开头?我的意思是没有添加任何代码,只是将其放在一个括号中,并用该括号将其关闭在我的js代码的末尾?对于脚本标记,我对其在正文末尾的位置感到困惑?js问题很可能是这些代码都是在DOM之前执行的因此,
q
<script src="tasklist.js"></script>