jQuery禁用/启用提交按钮

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

    ...但它不起作用。 有任何想法吗? 谢谢。


    问题在于,只有当焦点从输入移开(例如,有人点击输入或标签页时),更改事件才会触发。 尝试使用keyup代替:

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

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

    这个问题是2岁,但它仍然是一个很好的问题,这是第一个谷歌的结果...但所有现有的答案建议设置和删除 HTML 属性 (removeAttr(“disabled”))“disabled”,这不是正确的做法。 关于属性与财产有很多混淆。

    HTML

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

    HTML与DOM

    引用:

    属性在DOM中; 一个属性位于解析到DOM中的HTML中。

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

    JQuery的

    有关:

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

    相关:

    属性通常会影响DOM元素的动态状态,而不会更改序列化的HTML属性。 示例包括输入元素的值属性,输入和按钮的禁用属性或复选框的选中属性。 .prop()方法应该用于设置禁用和检查,而不是.attr()方法。

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

    概要

    为了更改DOM属性,例如表单元素的禁用状态,请使用.prop()方法。

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


    至于关于改变部分问题的禁用:有一个名为“输入”的事件,但浏览器支持是有限的,它不是一个jQuery事件,所以jQuery不会使它工作。 更改事件可靠地工作,但当元素失去焦点时会被触发。 所以人们可能会将这两者结合起来(有些人也会倾听密码和粘贴)。

    这里有一段未经测试的代码来展示我的意思:

    $(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);
        });
    });
    
    链接地址: http://www.djcxy.com/p/4493.html

    上一篇: jQuery disable/enable submit button

    下一篇: Is there a W3C valid way to disable autocomplete in a HTML form?