Javascript:单击 div/form 中的按钮不会执行 javascript 的意思吗?

Javascript: Clicking a button inside a div/form not executing the javascript meant for it?

好的,所以我在 div 中有一个按钮。这是 HTML:

<div class="row">
    <button type="button" id="submit">Send</button>
</div>

在此按钮之前,还有其他字段,如姓名、电子邮件和内容,这些都在一个表单中,ID 为 "contactForm"(在 div 和 class 名称 "container")。

我正在制作一个 JS 文件。我正在尝试获取它,以便当用户输入名称和内容等所有信息并点击提交时,它将 console.log() 该名称。该 JS 部分如下所示:

// Listen for submit btn click
document.getElementById('contactForm').addEventListener('submit', submitForm);

function submitForm(e) {
    e.preventDefault();

    var name = document.getElementById('name').value;
    var email = document.getElementById('email').value;
    var message = document.getElementById('message').value;

    console.log(name);
};

是的,所以这部分对我来说看起来不错,但是当我进入网站所在的本地主机时,我将任何随机的东西放入名称、电子邮件和消息字段中,然后我点击提交,什么都没有发生了。

debugger/console 表示

Uncaught TypeError: Cannot read property 'addEventListener' of null

第48行,是这样的:

document.getElementById('contactForm').addEventListener('submit', submitForm);

我今天开始学习js,很新,但是我在网上找不到任何解决这个问题的东西。我发现一些建议我将大的 JS 部分放在 document.ready 函数中,这样它会在所有内容加载后运行。如果我这样做,我试过了,没有错误(就像第 48 行一样)。它什么也没说,点击 btn 也没有做任何事情(比如,没有像我想要的那样显示名字)。

请帮忙,谢谢。

您是否检查过表单的 ID 是否存在拼写错误? 如果阻止默认行为,您也可以将提交按钮更改为简单的 div 并添加一个 onclick 事件处理程序。像这样使用它:

document.getElementById('submit').onclick=function(){document.getElementById('my-test-p').innerHTML='Submit was clicked'}
    <button type="button" id="submit">Send</button>
<p id='my-test-p'></p>

您可能试图在 DOM 加载之前附加事件。您可以为此使用多种解决方案。

  1. 将您的 javascript 代码放在标签后。

    <form id='contactForm'></form>
    <script>**** All your JavaScript goes here **** </script>
    
  2. 将您的代码放在 DOMContentLoaded 事件中。

    document.addEventListener("DOMContentLoaded", function(event) {
        document.getElementById('contactForm').addEventListener('submit', submitForm);
    });
    

如果您想使用 "Submit" 事件,您必须创建一个包含 <input type="submit"> 的表单,您的 ID 为“提交”的按钮不是有效的提交按钮。

为了简单起见,如果您希望在单击按钮时执行该功能,只需使用:

document.getElementById('submit').addEventListener("click", function(){
    e.preventDefault();

    var name = document.getElementById('name').value;
    var email = document.getElementById('email').value;
    var message = document.getElementById('message').value;

    console.log(name);
});