我有这个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');
        }
    });
});

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


$(function() {
  $(":text").keypress(check_submit).each(function() {
    check_submit();
  });
});

function check_submit() {
  if ($(this).val().length == 0) {
    $(":submit").attr("disabled", true);
  } else {
    $(":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);
        }
     });
 });

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

$('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');
    }
})

这里是文件输入字段的解决方案。

当文件未被选中时禁用文件字段的提交按钮,然后在用户选择要上传的文件后启用:

$(document).ready(function(){
    $("#submitButtonId").attr("disabled", "disabled");
    $("#fileFieldId").change(function(){
        $("#submitButtonId").removeAttr("disabled");
    });
});

Html:

<%= form_tag your_method_path, :multipart => true do %><%= file_field_tag :file, :accept => "text/csv", :id => "fileFieldId" %><%= submit_tag "Upload", :id => "submitButtonId" %><% end %>

或者对于我们这些不喜欢用jQ处理每一件小事的人来说:

document.getElementById("submitButtonId").disabled = true;

你也可以这样使用:

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

这是一个活生生的例子


这个问题已经2年了,但它仍然是一个好问题,它是第一个谷歌结果,但所有现有的答案都建议设置和删除HTML属性(removeAttr("disabled"))“残疾”,这不是正确的方法。关于属性和属性有很多混淆。

HTML

标记中<input type="button" disabled>中的"disabled"被W3C称为布尔属性。

HTML与DOM

引用:

属性在DOM中;一个属性在HTML中,被解析成DOM。

https://stackoverflow.com/a/7572855/664132

jQuery

相关:

然而,关于checked属性要记住的最重要的概念是,它并不对应于checked属性。该属性实际上对应于defaultChecked属性,应该仅用于设置复选框的初始值。选中的属性值不会随着复选框的状态而改变,而选中的属性则会。因此,跨浏览器兼容的确定是否选中复选框的方法是使用属性。

相关:

属性通常影响DOM元素的动态状态,而不改变序列化的HTML属性。例如,输入元素的value属性,输入和按钮的disabled属性,或者复选框的checked属性。应该使用.prop()方法来设置禁用和检查,而不是使用.attr()方法。

$( "input" ).prop( "disabled", false );

总结

(…更改DOM属性,例如[…]]禁用状态,使用.prop()方法。

(http://api.jquery.com/attr/)

关于问题的disable on change部分:有一个名为“input”的事件,但浏览器支持有限,而且它不是jQuery事件,因此jQuery无法使其工作。change事件可靠地工作,但在元素失去焦点时触发。因此,人们可能会将两者结合起来(有些人还会听keyup和paste)。

下面是一段未经测试的代码来说明我的意思:

$(document).ready(function() {
    var $submit = $('input[type="submit"]');
    $submit.prop('disabled', true);
    $('input[type="text"]').on('input change', function() { //'input change keyup paste'
        $submit.prop('disabled', !$(this).val().length);
    });
});

上面的答案也没有处理基于菜单的剪切/粘贴事件的检查。下面是我用来做这两件事的代码。注意,动作实际上发生在超时时,因为剪切和过去事件实际上是在更改发生之前触发的,因此超时为更改的发生提供了一点时间。

$( ".your-input-item" ).bind('keyup cut paste',function() {
    var ctl = $(this);
    setTimeout(function() {
        $('.your-submit-button').prop( 'disabled', $(ctl).val() == '');
    }, 100);
});

要删除禁用的属性使用,

 $("#elementID").removeAttr('disabled');

要添加禁用属性use,

$("#elementID").prop("disabled", true);

享受:)


如果按钮本身是一个jQuery样式的按钮(带有.button()),您将需要刷新按钮的状态,以便在删除/添加禁用属性后添加/删除正确的类。

$( ".selector" ).button( "refresh" );

我不得不做一些工作来使它适合我的用例。

我有一个表单,其中所有字段在提交前必须有一个值。

以下是我所做的:

  $(document).ready(function() {
       $('#form_id button[type="submit"]').prop('disabled', true);

       $('#form_id input, #form_id select').keyup(function() {
          var disable = false;

          $('#form_id input, #form_id select').each(function() {
            if($(this).val() == '') { disable = true };
          });

          $('#form_id button[type="submit"]').prop('disabled', disable);
       });
  });

感谢大家的回答。


看看我项目中的这个片段

 $("input[type="submit"]", "#letter-form").on("click",
        function(e) {
             e.preventDefault();


$.post($("#letter-form").attr('action'), $("#letter-form").serialize(),
                 function(response) {// your response from form submit
                    if (response.result === 'Redirect') {
                        window.location = response.url;
                    } else {
                        Message(response.saveChangesResult, response.operation, response.data);
                    }
});
$(this).attr('disabled', 'disabled'); //this is what you want

所以在你的操作执行后禁用按钮

(美元)。attr(“禁用”,“禁用”);


请参阅下面的代码以启用或禁用提交按钮

如果名称和城市字段有值,那么只有提交按钮将被启用。

<script> $(document).ready(function() { $(':input[type="submit"]').prop('disabled', true); $('#Name').keyup(function() { ToggleButton(); }); $('#City').keyup(function() { ToggleButton(); }); }); function ToggleButton() { if (($('#Name').val() != '') && ($('#City').val() != '')) { $(':input[type="submit"]').prop('disabled', false); return true; } else { $(':input[type="submit"]').prop('disabled', true); return false; } } </script> <form method="post"> <div class="row"> <div class="col-md-4"> <h2>Getting started</h2> <fieldset> <label class="control-label text-danger">Name</label> <input type="text" id="Name" name="Name" class="form-control" /> <label class="control-label">Address</label> <input type="text" id="Address" name="Address" class="form-control" /> <label class="control-label text-danger">City</label> <input type="text" id="City" name="City" class="form-control" /> <label class="control-label">Pin</label> <input type="text" id="Pin" name="Pin" class="form-control" /> <input type="submit" value="send" class="btn btn-success" /> </fieldset> </div> </div> </form>


提供各种类型的溶液。所以我想尝试一种不同的解决方案。简单地说,如果您在输入字段中添加id属性,将会更容易。

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

下面是jQuery

$("#textField").change(function(){
  if($("#textField").val()=="")
    $("#submitYesNo").prop('disabled', true)
  else
    $("#submitYesNo").prop('disabled', false)
});

登入表格:

<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


它是这样工作的:

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

确保在你的HTML中有一个“disabled”属性


香草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已经声明为只包含必需输入字段的数组。


禁用:$('输入(type = "提交"])。道具(“禁用”,真正的);

启用: $('input[type=“submit”]').removeAttr('disabled');

上面的enable代码比:

$('input[type="submit"]').removeAttr('disabled');

两种方法都可以使用。


我希望下面的代码能帮助到一些人!!:)

jQuery(document).ready(function(){

    jQuery("input[type=submit]").prop('disabled', true);

    jQuery("input[name=textField]").focusin(function(){
        jQuery("input[type=submit]").prop('disabled', false);
    });

    jQuery("input[name=textField]").focusout(function(){
        var checkvalue = jQuery(this).val();
        if(checkvalue!=""){
            jQuery("input[type=submit]").prop('disabled', false);
        }
        else{
            jQuery("input[type=submit]").prop('disabled', true);
        }
    });

}); /*DOC END*/

Try

let check = inp=> inp. nextelementsibling .disabled = ! <input type="text" name="textField" oninput="check(this)" / > <input type="submit" value="send" disabled />