javascript - 如果表单值更改,启用提交按钮

标签 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)
    ;

最佳答案

.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]

关于javascript - 如果表单值更改,启用提交按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48675281/

相关文章:

javascript - 将 jquery 动画还原为原始 css 状态

html - 输入必需的属性默认声明是什么?

javascript - 序列化和反序列化数据 - JavaScript

javascript - 如何从段落中检索值

javascript - 使用 PHP 或 Nodejs 的组件构建器

javascript - jQuery 验证插件、Bootstrap、Jasny Bootstrap 文件输入正则表达式 - 验证在 Firefox 中工作而不是在 Chrome/IE 中

javascript - Angular 函数结果未显示在 DOM 中

javascript - 有什么用?和 :

javascript - 在 javascript 中编写一个与另一个函数相反的函数

javascript - 类型错误 : Cannot call method 'replace' of null - Backbone. js