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

修改jQuery脚本实现表格多行录制音频存入对应file输入框

解决Django Admin动态行音频转文件输入的批量处理问题

修改思路

核心是遍历所有表格行,针对每行单独处理对应的音频标签和文件输入框,避免原脚本只选中第一行的问题。关键是用jQuery的.each()循环绑定行内元素,确保每行的音频都能对应到自身的文件输入框。

修改后的完整脚本

$(document).on('submit', 'form', function(e) {
    // 遍历表格中所有动态添加的行(根据实际表格选择器调整,比如你的表格类/id)
    $('table tr').each(function() {
        const $row = $(this);
        // 找到当前行内的audio标签和对应的file输入框
        const $audio = $row.find('audio');
        const $fileInput = $row.find('input[type="file"]');

        // 跳过没有音频或没有文件输入框的行
        if (!$audio.length || !$fileInput.length) return;

        const audioSrc = $audio.attr('src');
        if (!audioSrc) return;

        // 把audio的src转成Blob,再创建File对象
        fetch(audioSrc)
            .then(response => response.blob())
            .then(blob => {
                // 创建File对象,文件名可自定义
                const audioFile = new File([blob], 'recorded-audio.wav', { type: blob.type });
                // 用DataTransfer模拟文件选择,赋值给file输入框
                const dataTransfer = new DataTransfer();
                dataTransfer.items.add(audioFile);
                $fileInput[0].files = dataTransfer.files;
            })
            .catch(err => console.error('处理音频文件失败:', err));
    });
});

关键细节说明

  • 行遍历:用$('table tr').each()遍历所有行,替换原脚本中直接选择$('audio')和$('input[type="file"]')的全局选择器,确保每行元素单独处理。
  • 行内元素定位:用$row.find()在当前行内查找元素,避免跨行选中其他元素,适配动态添加的行(不管是初始行还是后来添加的,只要在表格里都会被遍历)。
  • 文件赋值逻辑:因为直接修改file输入框的value属性受浏览器安全限制,所以用DataTransfer对象来模拟文件选择操作,这是标准的可行方案。
  • 容错处理:跳过没有音频或文件输入框的行,避免报错影响其他行处理。

适配你的实际结构

如果你的表格或元素有特定的类名/ID,需要调整选择器:

  • 比如表格有dynamic-audio-table类,就把$('table tr')改成$('table.dynamic-audio-table tr')
  • 如果音频标签有特定类,比如recorded-audio,就把$row.find('audio')改成$row.find('audio.recorded-audio')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 06:05:27