jQuery的:禁用按钮,如果存在形式没有变化

问题描述:

目标:禁用按钮,如果存在形式没有变化。jQuery的:禁用按钮,如果存在形式没有变化

我已经有此功能的工作代码实际上,唯一的问题是我不能让它工作,如果在我的形式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')); 
}); 

谢谢你做。

+3

你为什么不开始就与按钮禁用,只启用它的形式是完全足够的提交是什么时候? – Difster

+0

这就是我所做的不过 – JaneTho

的.serialize()方法不文件输入类型的工作,让你可以使用新FORMDATA( '形式'); 以下是为您的使用情况下,工作代码:

$('#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()方法。

+0

这工作,但没有检测到变化。我认为它只能像onkeyup那样工作。一旦按钮被启用,它不会禁用它,只会检测到动作) – JaneTho

实现这将是非常复杂的,你将不得不使用以前上传文件的散列,如果用户选择另一个文件,你将不得不上传该文件来检索散列进行比较(使用一些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'); 
    }); 
});