当前位置:首页 > 技术 > 正文内容

JavaScript实现输入数字动态生成表单元素的两种方式

访客 技术 2026年7月16日 1

在前端开发中,常需根据用户输入的数值动态渲染对应数量的表单控件。以下是两种典型场景的实现方案:

场景一:实时输入即时生成 当用户在输入框中输入数字时,立即生成相应数量的文件上传项,并支持清空后自动移除所有内容。

<input type="number" placeholder="请输入图片数量" id="img_num" name="img_num" />


<script>
document.getElementById('img_num').addEventListener('input', function () {
    const container = document.getElementById('img_upload');
    const count = parseInt(this.value) || 0;

    // 清空原有内容
    container.innerHTML = '';

    // 动态创建指定数量的上传项
    for (let i = 1; i <= count; i++) {
        const item = document.createElement('li');
        item.id = `preview_${i}`;
        item.innerHTML = `
            <b>*</b>
            <span>图片${i}:</span>
            <span>
                <input type="file" name="img[]" accept="image/*" id="imgFile_${i}" />
            </span>
        `;
        container.appendChild(item);
    }
});
</script>

场景二:聚焦清空,失焦生成 用户聚焦输入框时清除已有内容,失焦后根据当前值重新生成对应数量的上传组件。

<input type="number" placeholder="请输入图片数量" id="img_num" name="img_num" />


<script>
const inputField = document.getElementById('img_num');
const container = document.getElementById('img_upload');

// 聚焦时清空内容
inputField.addEventListener('focus', function () {
    container.innerHTML = '';
});

// 失焦时根据输入值生成新内容
inputField.addEventListener('blur', function () {
    const num = parseInt(this.value) || 0;
    container.innerHTML = '';

    for (let i = 1; i <= num; i++) {
        const li = document.createElement('li');
        li.id = `preview_${i}`;
        li.innerHTML = `
            <b>*</b>
            <span>图片${i}:</span>
            <span>
                <input type="file" name="img[]" accept="image/*" id="imgFile_${i}" />
            </span>
        `;
        container.appendChild(li);
    }
});
</script>

核心事件对比说明

事件类型 触发时机 兼容性 适用场景
input 输入值变化时立即触发 所有现代浏览器 实时响应用户输入
propertychange IE专属,值变化即触发 仅限IE9及以下 旧版IE兼容处理
blur 失去焦点时触发 所有浏览器 延迟执行生成逻辑
focus 获得焦点时触发 所有浏览器 清理或重置状态

注:inputpropertychange 均用于监听值的实时变化,其中 propertychange 是为兼容旧版IE而保留的替代方案。onchange 则需在失去焦点后才触发,适用于 <select> 等非文本输入控件。

标签: JavaScriptHTML5

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。