如果表单值已更改,请启用“提交”按钮

时间:2018-02-07 23:54:43

标签: javascript jquery html css

我得到了一段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)
    ;

2 个答案:

答案 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);