无法启用禁用的输入[重复]

Posted

技术标签:

【中文标题】无法启用禁用的输入[重复]【英文标题】:Unable to enable disabled input [duplicate] 【发布时间】:2015-12-24 02:19:34 【问题描述】:

输入元素很容易被禁用,但是有什么方法可以启用它们呢?

下面的代码可以禁用但不能启用输入元素。

$('#dis').click(function() 
  $('#inp').attr('disabled', 'true');
);

$('#enb').click(function() 
  $('#inp').attr('disabled', 'false');
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input id='inp' type='text'>
<button id='enb'>Enable</button>
<button id='dis'>Disable</button>

【问题讨论】:

不要用户 $().attr() 用户 $().prop() 代替。见api.jquery.com/prop 【参考方案1】:

只是为了扩展答案...

真正的问题是您试图通过 setAttribute() 将 disabled 设置为 false,这与您的预期不同。如果设置了 disabled-attribute,则元素被禁用,无论值如何 所以,disabled="true"disabled="disabled"disabled="false" 都是等价的:元素被禁用)。

您应该改为删除完整属性

$('#enb').click(function() 
   $('#inp').removeAttr('disabled');
);

【讨论】:

【参考方案2】:

问题在于您的代码将 truefalse 写在引号中,使它们成为字符串而不是布尔值。请注意,'true''false' 都是真值,因此您的代码在这两种情况下都将启用的值设置为真。

我希望以下内容对您有用,请检查 sn-p:

$('#dis').click(function() 
    $("#inp").prop('disabled', true);
);

$('#enb').click(function() 
    $("#inp").prop('disabled', false);
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input id='inp' type='text'>
<button id='enb'>Enable</button>
<button id='dis'>Disable</button>

【讨论】:

【参考方案3】:

只需删除disabled 属性

$('#enb').click(function() 
   $('#inp').removeAttr('disabled');
);

【讨论】:

这不是一个好的做法。来自文档:Do not use this method to remove native properties such as checked, disabled, or selected. 为什么不呢? @NitaiJ.Perez 有什么见解吗? @anurageldorado,文档提到它可能会永久删除道具/属性,不允许重新设置。 所以在所有情况下都没有那么有害对吧? @anurageldorado,为什么要冒险?请参阅我的答案以获取安全的方法。【参考方案4】:

您可以使用removeAttr()

$('#dis').click(function() 
  $('#inp').attr('disabled', 'true');
);

$('#enb').click(function() 
  $('#inp').removeAttr('disabled');
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input id='inp' type='text'>
<button id='enb'>Enable</button>
<button id='dis'>Disable</button>

【讨论】:

【参考方案5】:
<scriptsrc="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input id='inp' type='text'>
<button id='enb'>Enable</button>
<button id='dis'>Disable</button>
<script type="text/javascript">
    $( document ).ready(function() 

$( "#dis" ).click(function() 
  $('#inp').prop( "disabled", true );

);

$( "#enb" ).click(function() 
  $('#inp').prop( "disabled", false );
);

);
</script>

【讨论】:

【参考方案6】:

嗨试试下面的代码

布尔值和字符串之间存在差异,而不是 'true' 使用 true 而不使用 引号

$('#dis').click(function() 
  $('#inp').attr('disabled', true);
);

$('#enb').click(function() 
  $('#inp').attr('disabled', false);
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input id='inp' type='text'>
<button id='enb'>Enable</button>
<button id='dis'>Disable</button>

【讨论】:

同样,attr() 方法不适用于布尔值 @Lacrioque 谁在说? Jquey 在线文档:api.jquery.com/prop 查看属性与属性 回答你所说的使用布尔值.. Pre 1.6 Jquery 使用带有 attr() 的布尔值我告诉你,但是在引入 prop() 方法之后,文档清楚地指出,使用带有 attr() 的布尔值会导致错误。如果你有一个工作代码很棒!但是布尔值不应该与 attr() 一起使用【参考方案7】:

试试

$('#dis').click(function() 
  $('#inp').attr('disabled', 'true');
);

$('#enb').click(function() 
  $('#inp').removeAttr('disabled');
);

因为disable="disable" 等于disable 本身

【讨论】:

【参考方案8】:

有办法!您需要像这样删除禁用的属性:

$('#inp').removeAttr('disabled');

【讨论】:

以上是关于无法启用禁用的输入[重复]的主要内容,如果未能解决你的问题,请参考以下文章

通过删除属性启用和禁用按钮[重复]

重新启用禁用的按钮[重复]

在jquery中启用和禁用文本字段[重复]

Android Checkbox listview全选(禁用/启用)[重复]

以编程方式启用和禁用移动数据的最新更新[重复]

在图片框悬停时启用/禁用 GIF [重复]