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'));
});
谢谢你做。
答
的.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');
});
});
你为什么不开始就与按钮禁用,只启用它的形式是完全足够的提交是什么时候? – Difster
这就是我所做的不过 – JaneTho