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

点击Search按钮后获取输入值存入localStorage并调用OMDbAPI的问题

问题解决:无法获取输入框值并触发电影搜索

核心问题原因

你在browse函数里用event.target.value是错误的——onsubmit事件的event.target指向的是form表单元素,表单本身没有value属性,自然拿不到输入内容。

修正步骤及完整代码

1. 修正browse函数:正确获取输入框值并触发搜索

通过输入框的id直接获取元素,拿到输入值后存入localStorage,再调用main函数执行新搜索:

2. 优化main函数:处理空输入、API异常等边界情况

3. 修复movieHTML函数:替换转义字符为正常HTML标签,避免渲染异常


完整修正代码

JavaScript 代码

const movieListEl = document.querySelector('.shows');
const savedSearchKey = localStorage.getItem("key");

// 页面加载时,若有保存的关键词则自动搜索
if (savedSearchKey) {
    main(savedSearchKey);
    document.getElementById('searchbar').value = savedSearchKey;
}

async function main(searchTerm) {
    // 空关键词不发起请求
    if (!searchTerm) return;
    
    const url = `https://www.omdbapi.com/?apikey=39a36280&s=${encodeURI(searchTerm)}`;
    try {
        const search = await fetch(url);
        const data = await search.json();
        
        // 处理无搜索结果的情况
        if (!data.Search) {
            movieListEl.innerHTML = '<p>未找到相关电影</p>';
            return;
        }
        
        movieListEl.innerHTML = data.Search.map(movie => movieHTML(movie)).join("");
    } catch (err) {
        movieListEl.innerHTML = '<p>搜索出错,请稍后重试</p>';
        console.error(err);
    }
}

function browse(event) {
    event.preventDefault();
    const searchInput = document.getElementById('searchbar');
    const searchValue = searchInput.value.trim();
    
    // 空输入不执行后续逻辑
    if (!searchValue) return;
    
    localStorage.setItem("key", searchValue);
    main(searchValue);
    // 清空输入框(可选)
    searchInput.value = '';
}

function movieHTML(details) {
    // 处理海报地址为N/A的情况,替换为占位图
    const posterSrc = details.Poster !== 'N/A' ? details.Poster : 'https://via.placeholder.com/200x300?text=No+Poster';
    return `
<div class="shows__content">
    <figure class="shows__poster">
        <img src="${posterSrc}" alt="${details.Title}海报" class="poster">
    </figure>
    <div class="poster__description">
        <h4 class="poster__title">${details.Title}</h4>
        <p class="poster__year">${details.Year}</p>
    </div>
</div>
    `
}

HTML 代码(无需修改)

<form action="" id="movie__searchbox" class="nav__search-bar" onsubmit="browse(event)">
    <input type="text" id="searchbar" class="nav__search" placeholder="Search" />
    <button type="submit">Search</button>
</form>
<div class="shows"></div>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 09:27:39