我得到了一段jquery代码,用于检查输入字段是否在表单中更改,然后无法提交按钮,但是,它不能处理输入类型=文件,如果我选择文件,该按钮仍保持禁用状态。任何帮助,将不胜感激? 这是jquery代码
$('form')
.each(function(){
$(this).data('serialized', $(this).serialize())
})
.on('change input', function(){
$(this)
.find('input:submit, button:submit')
.attr('disabled', $(this).serialize() == $(this).data('serialized'))
;
})
.find('input:submit, button:submit')
.attr('disabled', true)
;
答案 0 :(得分:0)
.serialize()
不适用于文件输入。您可以获取输入的文件名并保存它。
function mySerialize(obj) {
if (obj.type == 'file') {
return obj.files[0] ? obj.files[0].name : '';
} else {
return $(obj).serialize();
}
}
$('form')
.each(function(){
$(this).data('serialized', mySerialize(this));
})
.on('change input', function(){
$(this)
.find('input:submit, button:submit')
.attr('disabled', mySerialize(this) == $(this).data('serialized'))
;
})
.find('input:submit, button:submit')
.attr('disabled', true)
;
这假定单个文件输入。如果您有多文件输入,则需要循环遍历mySerialize()
中的所有文件并连接它们而不是仅使用files[0]
。
答案 1 :(得分:0)
又快又脏:
$('form')
.each(function(){
$(this).data('serialized', $(this).serialize())
})
.on('change input', function(){
var changed = false;
var fInputs = $(":file");
for (var i=0; i<fInputs.length; i++) {
changed = (fInputs[i].files.length) ? true : changed;
}
changed = ($(this).serialize() !== $(this).data('serialized')) ? true : changed;
$(this)
.find('input:submit, button:submit')
.attr('disabled', !changed)
;
})
.find('input:submit, button:submit')
.attr('disabled', true);