You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript表单提交返回Undefined问题排查求助

问题:Form Submit事件中获取输入值为undefined的排查与解决

我正在复刻一个JavaScript词典API项目,原视频使用按钮的click事件实现搜索功能,我尝试改用form的submit事件监听器,但点击按钮或按回车时,始终获取到undefined的输入值。之前做待办事项项目时也曾遇到过类似的事件问题,现在想彻底搞清楚原因,提升编程能力,求各位帮忙解答!

相关代码

HTML

<div class="container">
    <form>
        <input type="text" name="input" class="text" placeholder="Type Text Here">
        <button class="search-button">Search</button>
    </form>

    <div class="result">
        <h1>Text</h1>
        <button class="button-sound">
            <i class="fa-solid fa-volume-high"></i>
        </button>
    </div>

    <div class="answers">
        <p class="type-of">noun</p>
        <h1 class="meaning">Sample text</h1>
        <h1 class="other-meaning">
            Lorem ipsum dolor sit amet consectetur adipisicing elit. Aliquam, voluptatum quae! Iure, sunt provident nihil ducimus minima ab quaerat eaque 
            maiores ad culpa. Totam dolorem quam quod magni, dicta veniam!
        </h1>
    </div>
</div>

CSS

* {
    padding: 0;
    margin: 0;
    box-sizing: border-box;
    font-weight: normal;
}

body {
    height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    font-family: 'Poppins';
    background-color: #A1CCD1;
}

.container {
    padding: 35px;
    background-color: antiquewhite;
    height: 600px;
    width: 500px;
    border-radius: 15px;
    box-shadow: 0 4px 8px rgba(0,0,0,0.5);
}

form {
    padding-bottom: 30px;
}

input {
    padding: 20px;
    font-size: 20px;
    color: #302f2fbd;
    border: none;
    width: 75%;
}

input:focus {
    outline: none;
    color: #302f2fbd;
}

.search-button {
    font-size: 20px;
    padding: 19.1px;
    border: none;
    cursor: pointer;
    background-color: antiquewhite;
}

.search-button:focus {
    background-color: #ffff;
    transition: 0.3s;
}

.result {
    display: flex;
    justify-content: space-between;
    margin: 25px;
}

.result h1 {
    font-size: 40px;
    font-weight: bold;
}

.result button {
    font-size: 40px;
    border: none;
    background-color: antiquewhite;
    cursor: pointer;
}

.answers {
    margin: 30px;
}

.answers h1 {
    font-size: 15px;
    font-weight: bold;
    margin: 30px 0;
}

.answers .other-meaning {
    font-size: 17px;
}

JavaScript(原错误代码)

const inputEl = document.querySelector('form');
// const buttonEl = document.querySelector('.search-button')
const url = 'https://api.dictionaryapi.dev/api/v2/entries/en/';


inputEl.addEventListener('submit', (e) => {
    e.preventDefault();
    const input = inputEl.value;

    console.log(input)

    fetch(`${url}${input}`)
    .then((response) => response.json())
    .then((data) => {
        console.log(data);
    })

});

问题原因

你代码里的核心错误是:inputEl是form元素,而form元素本身并没有value属性,所以inputEl.value自然会返回undefined。你需要获取的是form内部的input输入框的值,而不是form元素的value。

解决方法

这里提供三种可行的修改方式,任选其一即可:

方法1:直接获取input元素

直接选中input输入框,在submit事件里读取它的value:

const formEl = document.querySelector('form');
const inputField = document.querySelector('.text'); // 通过class选中input
const url = 'https://api.dictionaryapi.dev/api/v2/entries/en/';

formEl.addEventListener('submit', (e) => {
    e.preventDefault();
    const input = inputField.value.trim(); // 顺便去掉前后空格

    if (input) { // 空输入时避免无效请求
        console.log(input);
        fetch(`${url}${input}`)
        .then((response) => response.json())
        .then((data) => {
            console.log(data);
        });
    }
});

方法2:通过form的elements属性获取

利用form元素的elements集合,通过input的name属性(你的input name是input)来获取值:

const inputEl = document.querySelector('form');
const url = 'https://api.dictionaryapi.dev/api/v2/entries/en/';

inputEl.addEventListener('submit', (e) => {
    e.preventDefault();
    const input = inputEl.elements.input.value.trim(); // 用name属性定位input

    console.log(input);
    if (input) {
        fetch(`${url}${input}`)
        .then((response) => response.json())
        .then((data) => {
            console.log(data);
        });
    }
});

方法3:使用FormData对象

用FormData来解析表单数据,适合表单有多个输入项的场景:

const inputEl = document.querySelector('form');
const url = 'https://api.dictionaryapi.dev/api/v2/entries/en/';

inputEl.addEventListener('submit', (e) => {
    e.preventDefault();
    const formData = new FormData(inputEl);
    const input = formData.get('input').trim(); // 通过name获取对应值

    console.log(input);
    if (input) {
        fetch(`${url}${input}`)
        .then((response) => response.json())
        .then((data) => {
            console.log(data);
        });
    }
});

内容的提问来源于stack exchange,提问作者Gad Ashell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 18:44:53