使用 jQuery 在表单中仅序列化类型=文件

Serialize only type=file in a form using jQuery

本文关键字:序列化 类型 文件 jQuery 表单 使用      更新时间:2023-09-26

我在表单中有一堆控件,其中包括几个输入类型='文件'框。 我想验证所有文件输入并确保选择了文件。 由于其他一些问题,我无法使用"必需"属性。

我虽然序列化所有文件框的数据并转换为数组,然后验证数组。 如果任何文件框没有值,我可以指示用户选择一个文件。我正在尝试将代码如下所示,它返回空。

var dataString = $("#adminForm").find('input[type="file"]').serialize();

有人可以建议如何仅序列化文件框吗

更新 1

通过查看答案,我了解到序列化不是验证表单的正确方法。 我为每个文件框添加了一个单独的类"filebox",并能够进行如下验证。

$('.filebox').each(function(i, obj) {
  if($('#'+obj.id).val() == 0) {
    /*raise error*/
    return;
  }
});

.serialize()将跳过未命名的输入。向输入添加 name 属性以包含它们,或删除以排除它们。

jQuery.serialize() 不序列化文件输入:http://api.jquery.com/serialize/#entry-longdesc

不过,您可以使用FormData对象。

$('#test').submit(function(e) {        
    e.preventDefault();
    var $copy = $(this).clone();
    // remove everything except file inputs
    $copy.find('select, input:not([type=file])').remove();
    var data = new FormData($copy.get(0));
    $.ajax({
        type: 'POST',
        url: 'upload.php', 
        data: data,
        //Options to tell jQuery not to process data or worry about content-type.
        cache: false,
        contentType: false,
        processData: false
    }).always(function(xhr, data) { console.log(data) });
});

注意这个小提琴中的请求:http://jsfiddle.net/zka9k8Lf/