我认为你不应该使用removeProp
,删除元素的属性会导致不良行为。但是对于您的问题,您可以将其写为:
var $search = $('#search');
function setSearchForm() {
$search.find('#clear_button').toggle();
$search.find('input[type=submit]').prop('disabled', !$search.find('input[type=text]').val().length);
}
只需使用 prop 并设置标志来禁用它。摘自官方文档
对于 DOM 元素或窗口对象的某些内置属性,如果尝试删除该属性,浏览器可能会生成错误。jQuery 首先将值 undefined 分配给属性,并忽略浏览器生成的任何错误。通常,只需要删除已在对象上设置的自定义属性,而不需要删除内置(本机)属性。
注意:请勿使用此方法删除本机属性,例如选中、禁用或选中。这将完全删除该属性,并且一旦删除,就不能再次将其添加到元素中。使用 .prop() 将这些属性设置为 false。
由于您使用的是 id 并且必须是唯一的,因此您也可以这样做
//cache this outside since this is gng to be unique and to avoid creating the object over and again
var $search = $('#search'), $clear = $('#clear_button');
function setSearchForm() {
$clear.toggle();
$search.find('input[type=submit]').prop('disabled', !$search.find('input[type=text]').val().length);
}