jQuery 禁用/启用提交按钮

IT技术 javascript html jquery
2021-01-31 04:53:09

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

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

6个回答

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

$(document).ready(function() {
     $(':input[type="submit"]').prop('disabled', true);
     $('input[type="text"]').keyup(function() {
        if($(this).val() != '') {
           $(':input[type="submit"]').prop('disabled', false);
        }
     });
 });
prop('disabled', true) 方法应该在 attr('disabled','disabled') 方法上使用,请参阅 prop() 上的文档
2021-04-09 04:53:09
$(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>将标记中的“禁用”称为布尔属性

HTML 与 DOM

引用:

属性在 DOM 中;属性位于解析为 DOM 的 HTML 中。

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

查询

有关的:

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

相关的:

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

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

概括

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

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


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

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

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

要删除禁用的属性使用,

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

并添加禁用属性使用,

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

享受 :)

或者对于我们那些不喜欢在每件小事上都使用 jQ 的人:

document.getElementById("submitButtonId").disabled = true;
这个得到 25 票赞成的答案解释了世界各地的许多蹩脚代码:/
2021-03-19 04:53:09
这是伟大的,你是一个Javascript素食主义者,一切,但这实际上并没有回答这个问题在所有
2021-03-31 04:53:09