禁用"提交"按钮,直到填写输入字段

Ric*_*wis 10 forms jquery

想知道是否有人能指出我正确的方向与下面的jquery.我想禁用提交按钮,直到填写输入字段.

我想出了这个

$(document).ready(function (){
 if ($('#inputName, #inputEmail, #inputTel').val().length > 0) {
  $("input[type=submit]").attr("disabled", "false");
 }
 else {
  $("input[type=submit]").attr("disabled", "true");
 }
});
Run Code Online (Sandbox Code Playgroud)

但即使填写了所有文本输入字段,该按钮也会永久禁用

仍在学习Jquery并且暂时没有使用过它.所以任何指针都会受到赞赏

谢谢

Kar*_*non 33

您的事件绑定仅适用于文档准备.

所以当你改变某些东西时就没有听众.

改为:

$(document).ready(function (){
    validate();
    $('#inputName, #inputEmail, #inputTel').change(validate);
});

function validate(){
    if ($('#inputName').val().length   >   0   &&
        $('#inputEmail').val().length  >   0   &&
        $('#inputTel').val().length    >   0) {
        $("input[type=submit]").prop("disabled", false);
    }
    else {
        $("input[type=submit]").prop("disabled", true);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 似乎更好的imo但你应该使用.prop()而不是.attr()用于浏览器的构造 (2认同)
  • 我知道这是一个陈旧的答案,但这对我最近有帮助.我想补充一个建议​​.我会添加(假设`inputTel`是`submit`按钮之前的最后一个字段的id):`$('#inputTel').keypress(function(){validate();});`到行在`$('#inputName,#inputEmail,#inputTel')之后.change(validate);`.我认为它有助于用户体验,因为每当用户处于"最后"字段和类型时它再次运行`validate()`函数,因为用户可能在提交之前在最终字段中键入内容,并且可能是被仍然禁用的提交按钮抛出. (2认同)

Ohg*_*why 5

您当前的代码很好,但不响应用户事件,这是您绊倒的地方.

$('#inputName, #inputEmail, #inputTel').keyup(function(){
    if($(this).val().length > 0){
        $("input[type=submit]").prop("disabled", false);
    }else{
        $("input[type=submit]").prop("disabled", true);
    }
});
Run Code Online (Sandbox Code Playgroud)

实际编辑,这将无法正常工作.因为其中一个元素会因为提交按钮而被启用,而不管其他元素.我会暂时修补.

编辑这里是粗略的草稿修复,它可能更漂亮,但绝对是一个很好的起点.

var toValidate = $('#inputName, #inputEmail, #inputTel'),
    valid = false;
toValidate.keyup(function () {
    if ($(this).val().length > 0) {
        $(this).data('valid', true);
    } else {
        $(this).data('valid', false);
    }
    toValidate.each(function () {
        if ($(this).data('valid') == true) {
            valid = true;
        } else {
            valid = false;
        }
    });
    if (valid === true) {
        $('input[type=submit]').prop('disabled', false);
    }else{
        $('input[type=submit]').prop('disabled', true);        
    }
});
Run Code Online (Sandbox Code Playgroud)

这是你的jsFiddle说明这种方法