为什么输入类型=文件中的更改没有用“form.serialzie()”标识

Why the change in input type=file is not identified with `form.serialzie()`

本文关键字:form 有用 serialzie 标识 类型 输入 文件 为什么      更新时间:2023-09-26

在提交更新之前,我正在检查form中的值是否已更改。form 内的所有其他控件(如果更改(将被标识,但不是input type=file控制。下面是我正在尝试的示例,如果您尝试在上传或不上传文件的情况下提交form,则响应不会更改。为什么这种行为只有input type=file?为什么没有确定input type=file的变化?

var form_serialize = "";
$(function() {
  form_serialize = $("#frmProfile").serialize();
})
$('.submit').on('click', function(e) {
  e.preventDefault();
  var isChanged = $("#frmProfile").serialize() == form_serialize ? false : true;
  if (isChanged)
    $('body').append('changed');
  else
    $('body').append('Not changed');
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="frmProfile">
  <input type="file" />
  <input type="submit" class="submit" value="Submit" />
</form>

根据 serialize(( 的文档

文件选择元素中的数据不会序列化。

相反,您可以使用支持jQuery ajaxForm的插件

或者你可以使用FormData对象,参考这些问题:Jquery/Ajax Form Submit(enctype="multipart/form-data"(。为什么 'contentType:False' 会导致 PHP 中未定义的索引?,使用 jQuery.ajax 发送多部分/表单数据