提问者:小点点

为什么输入类型=文件中的更改没有用`form'标识。serialzie()`


在提交更新之前,我正在检查表单中的值是否已更改。如果更改了表单中的所有其他控件,则会对其进行标识,但不会识别输入类型=文件控件。下面是我尝试的示例,如果您尝试提交表单,无论是否上载文件,响应都不会更改。为什么只有输入类型=文件时才会出现这种行为?为什么未识别输入类型=文件中的更改?

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>

共1个答案

匿名用户

根据序列化的留档()

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

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

或者您可以使用FormData对象,请参考这些问题:JQuery/Ajax Form提交(enctype="Multipart/form-data")。为什么'contentType: False'在PHP中引起未定义的索引?,用jQ发送多部分/formdatauery.ajax