如何获取附加了 Jquery Multifield 插件的多个下拉列表和文件上传的值

Posted

技术标签:

【中文标题】如何获取附加了 Jquery Multifield 插件的多个下拉列表和文件上传的值【英文标题】:How to get values of multiple dropdowns and file uploads appended with Jquery Multifield plugin 【发布时间】:2020-06-11 04:07:42 【问题描述】:

我正在尝试使用 jquery 获取多个选择框和文件输入的值。 我使用Jquery Multifield plugin 多次附加相同的字段。到目前为止,我无法获取所有值,因为我使用 jquery 和 ajax 发布这些输入。


$('.myFlag').on('change', function () 

      var flagID = $(".myFlag option:selected").val();
alert(flagID);
);
$('#submit').on('click', function () 
var flag_attach = $('.InputFile')[0].files[0].name;
alert(flag_attach);
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="example-6">
            <div class="row group" >
                <div class="col-md-1"></div>
                <div class="col-md-3">

                    <div class="form-group">
                        <label>Choose Flag Type</label>
                        <select class="form-control myFlag" name="flag_name[]">
                            <option value="">Select Flag</option>
                                <option value="1">A</option>
                                 <option value="2">B</option>
                                  <option value="3">C</option>
                        </select>
                        <select class="form-control myFlag" name="flag_name[]">
                            <option value="">Select Flag</option>
                                <option value="1">A</option>
                                 <option value="2">B</option>
                                  <option value="3">C</option>
                        </select>
                    </div>
                </div>

                <div class="col-md-3" >
                    <div class="form-group">
                        <label for="exampleInputFile">Upload Flag</label>
                        <div class="input-group">

                            <input type="file" class="custom-file-input InputFile" name="flag_attach[]" id="InputFile" accept="application/pdf">
                            <label class="custom-file-label" for="exampleInputFile">Choose file</label>
<label for="exampleInputFile">Upload Flag</label>
                        <div class="input-group">

                            <input type="file" class="custom-file-input InputFile" name="flag_attach[]"  accept="application/pdf">
                            <label class="custom-file-label" for="exampleInputFile">Choose file</label>

                        </div>
                    </div>
                </div>
               
            </div>
                
                <!-- <div class="col-md-2"></div> --> 
            <!-- </div> -->
           </div>
           <button type="button" id="submit">submit </button>

【问题讨论】:

这里var flagID = $("#flag_id option:selected").val(); 你使用id来获取值,所以只取id的第一个实例,要么使用class,要么创建sn-p并解释你需要实现的逻辑 @AkhilAravind 我已经更新了问题,请看一下。不幸的是,我找不到任何用于将 Jquery Multifield 插件添加到 sn-p 中的 CDN 链接。 【参考方案1】:

在启用 jquery-multifield 插件的情况下检查下面的 sn-p。在这里您可以添加文件并在提交时,可以在控制台中看到填充的数据。请使用浏览器控制台以获得清晰的视图。

这里表单数据赋值给_form变量,你需要把这个变量发送到服务器。

$('.myFlag').on('change', function() 
  var flagID = $(this).val();
);
$('#myForm').on('submit', function() 
  var _form = new FormData(this);// get the form object values. Send this variable to ajax call.
  for (var value of _form.values()) 
    console.log(value); // shows each form values. here you can see the file name etc...
  
);
$('#example-6').multifield(
  section: '.section',
  btnAdd: '.btnAdd',
  btnRemove: '.btnRemove'
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="http://maxkostinevich.github.io/jquery-multifield/jquery.multifield.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
<div class="container">
  <form id="myForm" enctype="multipart/form-data">
    <div id="example-6">
      <div class="row group">
        <div class="col-md-1">
          <button type="button" class="btn btn-primary btnAdd">Add</button>
        </div>
        <div class="section">
          <div class="col-md-3">
            <div class="form-group">
              <label>Choose Flag Type</label>
              <select class="form-control myFlag" name="flag_name[]">
                <option value="">Select Flag</option>
                <option value="1">A</option>
                <option value="2">B</option>
                <option value="3">C</option>
              </select>
            </div>
          </div>
          <div class="col-md-3">
            <div class="form-group">
              <label for="exampleInputFile">Upload Flag</label>
              <div class="input-group">
                <input type="file" class="custom-file-input InputFile" name="flag_attach[]" accept="application/pdf">
              </div>
            </div>
          </div>
          <div class="col-md-3">
            <button class="btn btn-danger btnRemove" type="button">Remove</button>
          </div>
        </div>
      </div>
    </div>
    <button type="submit" id="submit" class="btn btn-primary">submit </button>
  </form>
</div>

【讨论】:

感谢您的努力。它完全按照我想要的方式在您的 sn-p 中工作,但我没有在原始代码中获取所有文件输入。它只显示第一个文件。请看这个codepen.io/haro0n/pen/gOpWbmW @HaroonKhan 为什么不按照答案中的确切标记进行操作,而且您的 javascript 也很混乱,一切都清楚地写在 sn-p 中。跟着它。 :) 我无法使用您提供的确切代码,因为由于某种原因,我不使用 formdata.append() 就无法获得 flag_attachment 输入; @HaroonKhan 我可以知道你在用它做什么吗?? 整个场景明显不同,因为我的表单中有许多其他输入要处理。请看看codepen,任何进一步的帮助将不胜感激:)

以上是关于如何获取附加了 Jquery Multifield 插件的多个下拉列表和文件上传的值的主要内容,如果未能解决你的问题,请参考以下文章

从附加元素获取 jQuery 对象的更简单方法

如何获取jQuery中动态添加的元素

如何使用来自localstorage的jquery将项目附加到DOM?

通过jquery获取附加元素的属性[重复]

如何获取值和删除文本框jQuery

AJAX - 如何从输入文件中获取数据以附加表单数据?