Javascript 页面加载时调用 onclick 函数

Javascript onclick function being called on page load

我有一个简单的 Javascript 函数,在单击页面上的按钮时调用。但是它会在页面加载后立即被调用。谁能告诉我这里的问题是什么?

HTML是:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <button id="btn">ClicMe!</button>
    <div id="demo"></div>
    <script src="script.js"></script>
  </body>
</html>

而'script.js'文件如下

var url = "example.txt";

function loadDoc(url, cFunction) {
  var xhttp;
  xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      cFunction(this);
    }
  };
  xhttp.open("GET", url, true);
  xhttp.send();
}

function myFunction(xhttp) {
  document.getElementById("demo").innerHTML = xhttp.responseText;
}

var btn = document.getElementById("btn");
btn.onclick = loadDoc(url, myFunction);

您在 JS 文件中明确调用了 loadDoc() 函数。 你应该试试这个 -

var url = "https://jsonplaceholder.typicode.com/posts";

function loadDoc() {
  var xhttp;
  xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
    document.getElementById("demo").innerHTML = this.responseText;
    }
  };
  xhttp.open("GET", url, true);
  xhttp.send();
  
}
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <button id="btn" onclick='loadDoc()'>ClicMe!</button>
    <div id="demo"></div>
    <script src="script.js"></script>
  </body>
</html>

您必须附加一个在用户单击按钮时调用函数的事件侦听器:

btn.addEventListener('click', () => {
  loadDoc(url);
});

使用这样的箭头函数:

btn.onclick = () => loadDoc(url, myFunction);

脚本的最后一行是调用函数而不是为其分配处理程序。由于您有要调用它的参数,因此您需要使用一些东西将参数和函数捆绑在一起以供调用时使用。如果将最后一行替换为以下内容,它应该可以工作:

btn.onclick = loadDoc.bind(undefined, url, myFunction) // "this" value is not needed, so it is left undefined