457

我必须首先禁用输入,然后单击链接以启用它们。

这是我到目前为止所尝试的,但它不起作用。

HTML:

<input type="text" disabled="disabled" class="inputDisabled" value="">

jQuery:

$("#edit").click(function(event){
   event.preventDefault();
   $('.inputDisabled').removeAttr("disabled")
});


这显示了我true,然后false输入没有任何变化:

$("#edit").click(function(event){
   alert('');
   event.preventDefault();
   alert($('.inputDisabled').attr('disabled'));
   $('.inputDisabled').removeAttr("disabled");
   alert($('.inputDisabled').attr('disabled'));
});
4

11 回答 11

937

使用 jQuery 时,始终使用该prop()方法来启用或禁用元素(原因见下文)。

在您的情况下,它将是:

$("#edit").click(function(event){
   event.preventDefault();
   $('.inputDisabled').prop("disabled", false); // Element(s) are now enabled.
});

jsFiddle 示例在这里。


prop()当您可以使用attr()/来执行此操作时,为什么还要使用removeAttr()

基本上,prop()应该在获取或设置属性(例如autoplaychecked等)disabled时使用。required

通过使用removeAttr(),您将完全删除disabled属性本身 - 而prop()只是将属性的基础布尔值设置为 false。

虽然您可以使用attr()/来完成您想要做的事情removeAttr(),但这并不意味着它应该完成(并且可能会导致奇怪/有问题的行为,如本例所示)。

以下摘录(取自prop() 的 jQuery 文档)更详细地解释了这些要点:

“属性和属性之间的区别在特定情况下可能很重要。在 jQuery 1.6 之前,该.attr()方法有时会在检索某些属性时考虑属性值,这可能会导致不一致的行为。从 jQuery 1.6 开始,该.prop() 方法提供了一种显式检索的方法属性值,同时 .attr()检索属性。”

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

于 2012-11-29T13:09:23.567 回答
63

删除禁用的属性使用,

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

并添加禁用属性使用,

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

享受 :)

于 2015-01-21T14:35:15.910 回答
44
<input type="text" disabled="disabled" class="inputDisabled" value="">
​&lt;button id="edit">Edit</button>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

$("#edit").click(function(event){
    event.preventDefault();
    $('.inputDisabled').removeAttr("disabled")
});​

http://jsfiddle.net/ZwHfY/

于 2012-11-29T13:12:00.070 回答
16

像这样使用,

HTML:

<input type="text" disabled="disabled" class="inputDisabled" value="">

<div id="edit">edit</div>

JS:

 $('#edit').click(function(){ // click to
            $('.inputDisabled').attr('disabled',false); // removing disabled in this class
 });
于 2012-11-29T13:12:00.277 回答
9

我认为您正在尝试切换禁用状态,以防万一您应该使用它(来自this question):

$(".inputDisabled").prop('disabled', function (_, val) { return ! val; });

这是一个工作小提琴。

于 2012-11-29T13:15:14.037 回答
7

用于删除禁用的属性

 $('#inputDisabled').removeAttr('Disabled');

用于添加禁用的属性

 $('#inputDisabled').attr('disabled', 'disabled' );
于 2020-08-05T09:39:36.923 回答
4

2018 年,没有 JQuery

我知道这个问题是关于 JQuery 的:这个答案仅供参考。

document.getElementById('edit').addEventListener(event => {
    event.preventDefault();
    [...document.querySelectorAll('.inputDisabled')].map(e => e.disabled = false);
}); 
于 2018-06-04T13:52:12.097 回答
3

以为您可以轻松设置

$(function(){
$("input[name^=radio_share]").click
(
    function()
    {
        if($(this).attr("id")=="radio_share_dependent")
        {
            $(".share_dependent_block input, .share_dependent_block select").prop("disabled",false);   
        }
        else
        {
            $(".share_dependent_block input, .share_dependent_block select").prop("disabled",true);   
        }
    }
 );
});
于 2013-11-29T11:26:51.160 回答
3

这是唯一对我有用的代码:

element.removeProp('disabled')

请注意,它是removeProp而不是removeAttr

我在jQuery 2.1.3这里使用。

于 2015-04-03T00:27:32.863 回答
1

这个问题特别提到了 jQuery,但如果您希望在没有 jQuery 的情况下完成此操作,则原版 JavaScript 中的等价物是:

elem.removeAttribute('disabled');
于 2018-03-02T20:54:25.257 回答
0

尝试特殊选择器:

不工作:$('#ID_Unit').removeAttr("disabled");
工作:$('select[id=ID_Unit]:disabled').removeAttr("disabled");

所有“选择”控件$('select:disabled').removeAttr("disabled");

“选择”是控制类型,如“类型”等。

于 2021-04-19T13:48:15.243 回答