javascript - 使用 JQuery 逐个添加元素

标签 javascript jquery html

我正在尝试使用 JQuery 在表单中添加多个 div 标签:

下面是我最初的 HTML 表单:

<form action="" method="post">
            <div id="div_file0">
             <input type="file" name="files0[]" id="files0" multiple><br/>
            </div>
             <a href="#" id='more_files'>Click to add more files</a>
             After uploading multiple files, click Submit.<br>
             <input type="submit" value="Submit">
</form>

点击Click to add more files后,我想创建更多div标签,如下所示:

<form action="http://localhost:5000/api/upload_file" method="post">
            <div id="div_file0">
             <input type="file" name="files0[]" id="files0" multiple=""><br>
            </div>
            <div id="div_file1">
             <input type="file" multiple="" id="files1" name="files1[]"><a class="remove" href="#" id="remove_file" name="remove_file1" value="1">Remove file</a>
            </div>

             <a href="#" id="more_files">Click to add more files</a>
             After uploading multiple files, click Submit.<br>
             <input type="submit" value="Submit">
        </form>

但是,新的 div 标记会替换现有内容,并在新创建的 div 元素中添加新旧 input 标记。

<form action="http://localhost:5000/api/upload_file" method="post">
            <div id="div_file1">
             <input type="file" name="files0[]" id="files0" multiple=""><br>
             <input type="file" multiple="" id="files1" name="files1[]"><a class="remove" href="#" id="remove_file" name="remove_file1" value="1">Remove file</a>
            </div>

             <a href="#" id="more_files">Click to add more files</a>
             After uploading multiple files, click Submit.<br>
             <input type="submit" value="Submit">
        </form>

使用的Javascript如下:

<script type="text/javascript">
            $(document).ready(function() {
                $(document).on('click','#more_files', function() {
                var numOfInputs = 1;
                while($('#files'+numOfInputs).length) { numOfInputs++; }//once this loop breaks, numOfInputs is greater than the # of browse buttons
                console.log("numOfInputs:"+numOfInputs)
                $("<br/>").insertAfter("#div_file"+(numOfInputs-1));
                $("div")
                .attr("id","div_file"+numOfInputs)
                .insertAfter("#div_file"+(numOfInputs-1));

                var input = $("<input type='file' multiple/>")
                .attr("id", "files"+numOfInputs)
                .attr("name", "files"+numOfInputs+"[]");

                var remove = $("<a class='remove' href='#'>Remove file</a>")
                .attr("id","remove_file")
                .attr("name","remove_file"+numOfInputs)
                .attr("value",numOfInputs);

                $("#div_file"+numOfInputs).append(input,remove);
                });
            });
        </script>

最佳答案

这相当多余,因为您已经使用多个文件输入。

如果您确实想以这种方式执行此操作,请从要在 DOM 中重复的 HTML 内容中删除所有 id 属性。它们不是必需的,只会造成更多不必要的复杂化。然后,您可以抓取第一个 .div_file 元素,克隆它,并将其插入到表单中的 a 之前,如下所示:

$(document).ready(function() {
  $(document).on('click', '#more_files', function() {
    var $clone = $('.div_file:first').clone();
    $clone.insertBefore('form a');
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form action="" method="post">
  <div class="div_file">
    <input type="file" name="files[]" multiple><br/>
  </div>
  <a href="#" id='more_files'>Click to add more files</a> After uploading multiple files, click Submit.<br>
  <input type="submit" value="Submit">
</form>

关于javascript - 使用 JQuery 逐个添加元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59054599/

相关文章:

javascript - 恢复第一个单选按钮选中的 onclick 事件

javascript - ng 中指令的动态 templateUrl 在 longView 中重复

javascript - 在主干js中访问返回值

jquery - 缓动字符串对我来说不能正常工作。有人可以描述我做错了什么吗?

html - 覆盖 IE7 中的内联 CSS 样式

javascript - 如何特征检测浏览器是否支持动态 ES6 模块加载?

javascript - 无法加载“用户名 :password http://link: Cross origin requests are only supported for protocol schemes http, 数据、chrome、chrome 扩展

javascript - 有什么方法可以暂时禁用 fullpage.js 的滚动功能?

javascript - 使用javascript将数组数据发送到另一个页面?

html - 在 bootstrap 3 上用视频定位 div