Javascript jQuery:在更改时提交表单

Javascript jQuery:在更改时提交表单,javascript,jquery,Javascript,Jquery,我试图在用户单击按钮时提交带有字段元素的表单。我正在使用change函数,它是在选择文件后调用的。问题在于提交表单数据时没有字段数据。设置字段数据后,如何使其提交表单 如果我用submit而不是change调用下面的代码,那么它可以正常工作 你可以试试 $.fn.serializefiles = function() { var obj = $(this); /* ADD FILE TO PARAM AJAX */ var formData = new FormData(

我试图在用户单击按钮时提交带有字段元素的表单。我正在使用change函数,它是在选择文件后调用的。问题在于提交表单数据时没有字段数据。设置字段数据后,如何使其提交表单

如果我用submit而不是change调用下面的代码,那么它可以正常工作

你可以试试

$.fn.serializefiles = function() {
    var obj = $(this);
    /* ADD FILE TO PARAM AJAX */
    var formData = new FormData();
    $.each($(obj).find("input[type='file']"), function(i, tag) {
        $.each($(tag)[0].files, function(i, file) {
            formData.append(tag.name, file);
        });
    });
    var params = $(obj).serializeArray();
    $.each(params, function (i, val) {
        formData.append(val.name, val.value);
    });
    return formData;
};
然后在函数ajax中

var request = $.ajax({
    type: "POST",
    processData: false,
    contentType: false,
    url: "{{URL::action('StudentController@addDocument')}}",
    data: $('#fileform').serializefiles(),
});
如果你想通过ajax上传一个或多个文件,你必须在$'fileupload'中写一个函数。。。引用输入元素,formData需要一个表单元素,请尝试以下操作:

$('#fileupload').change(function () {
    var formData = new FormData(this.form);

    ...

});
您还需要将name属性添加到文件输入中

然后,请求看起来像:

...
Content-Disposition: form-data; name="file"; filename="FILE_NAME"
Content-Type: CONTENT_TYPE
...

fileupload元素在哪里?您是否尝试过在文件字段中添加name属性?new FormData的参数应该是一个表单,而不是一个输入。@sotoz:我只是尝试了一下,它不起作用difference@Barmar:这是一张表格。如果我添加一个submit按钮,并使用submit而不是change,那么文件数据传输就正确了。问题在于change函数。您应该使用jquery库来完成这项工作。我通常使用。使用起来很简单。也许我不够清楚。如果我使用submit而不是change,那么ajax表单上传效果很好。可能这是因为调用change时,文件仍然没有被添加。我已经尝试了你的两个建议,但仍然不起作用。实际上,只有$this[0]起作用。当我将this.form与submit一起使用时,它不起作用。@dan klasson从您的更改中调用this.form.submit怎么样?
...
Content-Disposition: form-data; name="file"; filename="FILE_NAME"
Content-Type: CONTENT_TYPE
...