目标:如果表单中没有任何更改,请禁用按钮。
我实际上已经有了这个函数的工作代码,唯一的问题是如果我的表单中有input[type=file]
,我就无法使用它。如果我只更改文件,则按钮仍处于禁用状态。
请你帮帮我吗?
这是我到目前为止所做的事情
$('#formEdit').each(function(){
$(this).data('serialized', $(this).serialize());
}).on('change input', function(){
$(this).find('input:submit').attr('disabled', $(this).serialize() == $(this).data('serialized'));
});
谢谢。
答案 0 :(得分:0)
实现这一点会非常复杂,您必须使用上一个上传文件的哈希值,如果用户选择另一个文件,您必须上传该文件以检索要比较的哈希值(使用一些edge-api使客户端的哈希计算可能不一致)。所以你可以确定(理论上它会猜测,因为2个不同的文件有很小的机会发生哈希冲突),如果文件是相同的。
允许再次上传同一文件并在服务器端交换它会更简单(并且对用户来说更少混淆)。
HTML
<form id="form">
<input type="file" name="foo" />
<input type="text" name="bar" />
<button type="submit" id="btn">submit</button>
</form>
JS
$(function(){
$('#btn').attr('disabled', true);
$('#form :input').on('change', function(){
$('#btn').removeAttr('disabled');
});
});
答案 1 :(得分:0)
.serialize()方法不适用于文件输入类型,因此您可以使用新FormData(&#39;表单&#39;); 以下是您的用例的工作代码:
$('#formEdit').each(function() {
var form_data = new FormData('form');
$(this).data('serialized', form_data);
}).on('change input', function() {
var form_data1 = new FormData('form');
$(this).find('input:submit').attr('disabled', form_data1 == $(this).data('serialized'));
});
请参阅jquery doc以了解有关.serialize()方法的更多信息。