我有这个HTML:

<input type="text" name="textField" />
<input type="submit" value="send" />

我怎么做这样的事情:

当文本字段为空时,提交应该被禁用(disabled="disabled")。 当在文本字段中键入内容以删除禁用属性时。 如果文本字段再次变为空(文本被删除),提交按钮应该再次禁用。

我是这样做的:

$(document).ready(function(){
    $('input[type="submit"]').attr('disabled','disabled');
    $('input[type="text"]').change(function(){
        if($(this).val != ''){
            $('input[type="submit"]').removeAttr('disabled');
        }
    });
});

但是不管用。什么好主意吗?


当前回答

登入表格:

<form method="post" action="/login">
    <input type="text" id="email" name="email" size="35" maxlength="40" placeholder="Email" />
    <input type="password" id="password" name="password" size="15" maxlength="20" placeholder="Password"/>
    <input type="submit" id="send" value="Send">
</form>

Javascript:

$(document).ready(function() {    
    $('#send').prop('disabled', true);

    $('#email, #password').keyup(function(){

        if ($('#password').val() != '' && $('#email').val() != '')
        {
            $('#send').prop('disabled', false);
        }
        else
        {
            $('#send').prop('disabled', true);
        }
    });
});

其他回答

登入表格:

<form method="post" action="/login">
    <input type="text" id="email" name="email" size="35" maxlength="40" placeholder="Email" />
    <input type="password" id="password" name="password" size="15" maxlength="20" placeholder="Password"/>
    <input type="submit" id="send" value="Send">
</form>

Javascript:

$(document).ready(function() {    
    $('#send').prop('disabled', true);

    $('#email, #password').keyup(function(){

        if ($('#password').val() != '' && $('#email').val() != '')
        {
            $('#send').prop('disabled', false);
        }
        else
        {
            $('#send').prop('disabled', true);
        }
    });
});

我们可以简单地使用if & else。如果你的输入是空的,我们可以有

if($(#name).val() != '') {
   $('input[type="submit"]').attr('disabled' , false);
}

否则我们可以把false变成true

香草JS解决方案。它适用于整个表单,而不仅仅是一个输入。

在问题中选择JavaScript标签。

HTML表单:

var form = document.querySelector('form') var inputs = form.querySelectorAll('input') var required_inputs = form.querySelectorAll('input[required]') var register = document.querySelector('input[type="submit"]') form.addEventListener('keyup', function(e) { var disabled = false inputs.forEach(function(input, index) { if (input.value === '' || !input.value.replace(/\s/g, '').length) { disabled = true } }) if (disabled) { register.setAttribute('disabled', 'disabled') } else { register.removeAttribute('disabled') } }) <form action="/signup"> <div> <label for="username">User Name</label> <input type="text" name="username" required/> </div> <div> <label for="password">Password</label> <input type="password" name="password" /> </div> <div> <label for="r_password">Retype Password</label> <input type="password" name="r_password" /> </div> <div> <label for="email">Email</label> <input type="text" name="email" /> </div> <input type="submit" value="Signup" disabled="disabled" /> </form>

这里做一些解释:

在这段代码中,我们在html表单上添加了keyup事件,并在每个按键检查所有输入字段。如果至少有一个输入字段为空或只包含空格字符,则将true值赋给禁用变量并禁用提交按钮。

如果你需要禁用提交按钮,直到所有必需的输入字段都被填满-替换:

inputs.forEach(function(input, index) {

:

required_inputs.forEach(function(input, index) {

其中required_inputs已经声明为只包含必需输入字段的数组。

埃里克,当用户输入文本然后删除所有文本时,你的代码似乎对我不起作用。如果有人遇到同样的问题,我创建了另一个版本。来吧,伙计们:

$('input[type="submit"]').attr('disabled','disabled');
$('input[type="text"]').keyup(function(){
    if($('input[type="text"]').val() == ""){
        $('input[type="submit"]').attr('disabled','disabled');
    }
    else{
        $('input[type="submit"]').removeAttr('disabled');
    }
})

问题是change事件仅在焦点从输入移开时触发(例如,有人单击输入或从输入中删除标签)。试着用keyup代替:

$(document).ready(function() {
     $(':input[type="submit"]').prop('disabled', true);
     $('input[type="text"]').keyup(function() {
        if($(this).val() != '') {
           $(':input[type="submit"]').prop('disabled', false);
        }
     });
 });