Jquery:如果表单

时间:2017-07-26 07:10:16

标签: javascript jquery forms validation input

目标:如果表单中没有任何更改,请禁用按钮。

我实际上已经有了这个函数的工作代码,唯一的问题是如果我的表单中有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'));
});

谢谢。

2 个答案:

答案 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()方法的更多信息。