首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

HTML5 多圖上傳預覽 + 每圖描述:FileReader 讀取生成預覽,描述輸入框綁定 data-index 統一收集

     編輯:程式設計綜合問答

需求:`input[multiple]` 選圖 → 即時預覽縮略圖 → 每圖下方輸入描述 → 提交時圖片+描述配對上傳。

核心邏輯

function previewImages(input) {
    const files = input.files;
    const preview = document.getElementById('preview');
    preview.innerHTML = '';
    
    for (let i = 0; i < files.length; i++) {
        const file = files[i];
        if (!file.type.startsWith('image/')) continue;
        
        const wrapper = document.createElement('div');
        wrapper.className = 'img-wrapper';
        wrapper.dataset.index = i;
        
        const img = document.createElement('img');
        img.src = URL.createObjectURL(file);
        img.onload = () => URL.revokeObjectURL(img.src);
        
        const desc = document.createElement('textarea');
        desc.placeholder = '輸入描述...';
        desc.dataset.index = i;
        
        wrapper.appendChild(img);
        wrapper.appendChild(desc);
        preview.appendChild(wrapper);
    }
}

// 提交時收集
function collectData() {
    const formData = new FormData();
    const files = document.getElementById('myimage').files;
    const descs = document.querySelectorAll('#preview textarea');
    
    descs.forEach(ta => {
        const idx = +ta.dataset.index;
        if (idx < files.length) {
            formData.append('files', files[idx]);
            formData.append(`desc_${idx}`, ta.value);
        }
    });
    return formData; // fetch/post 發送
}

HTML 結構

<input type="file" id="myimage" multiple accept="image/*" onchange="previewImages(this)" />
<div id="preview" style="display:flex; flex-wrap:wrap; gap:10px;"></div>
<button onclick="submitData()">提交</button>

後端接收

按 `files` 陣列與 `desc_0`、`desc_1`... 配對入庫,或前端壓縮為 JSON 字段 `images: [{file, desc}]`。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved