ChatGPT解决这个技术问题 Extra ChatGPT

如何使用 jQuery 删除“禁用”属性?

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

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

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'));
});
我没有看到你的问题。你在问什么?
那么问题是什么?我的意思是你面临什么问题
使用 prop() - .prop('disabled', false)
如果您的问题已解决,请勾选已接受的(真实)答案以供其他人了解...
问题是在clic之后它没有被禁用

d
dsgriffin

总是在使用 jQuery 时使用 prop() 方法来启用或禁用元素(原因见下文)。

在您的情况下,它将是:

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

jsFiddle example here.

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

基本上,在获取或设置 属性(例如 autoplaycheckeddisabledrequired 等)时应使用 prop()

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

虽然您想可以使用 attr()/removeAttr() 完成,但这并不意味着它应该完成(并且可能导致奇怪/有问题的行为,在这种情况下)。

以下摘录(摘自 jQuery documentation for prop())更详细地解释了这些要点:

“属性和属性之间的区别在特定情况下可能很重要。在 jQuery 1.6 之前,.attr() 方法有时会在检索某些属性时考虑属性值,这可能会导致行为不一致。从 jQuery 1.6 开始,.prop( ) 方法提供了一种显式检索属性值的方法,而 .attr() 检索属性。” “属性通常会影响 DOM 元素的动态状态,而不会更改序列化的 HTML 属性。示例包括输入元素的 value 属性、输入和按钮的 disabled 属性或复选框的 checked 属性。.prop() 方法应该用于设置禁用和检查而不是 .attr() 方法。应使用 .val() 方法获取和设置值。"


人们还应该知道脏检查标志,它完全打破了复选框的 attrpropw3.org/TR/html5/forms.html#concept-input-checked-dirty 除了内部 jQuery 变通方法魔术。
嗯, .prop("disabled", false) 在按钮中似乎对我不起作用-标签中的 'disabled' 属性没有任何值。
@UpTheCreek 也不适合我。但是我发现'this'子句(像往常一样)是一个范围问题。在特定情况下,在 thisthis.prop("disabled", false) 指向的元素上执行了 .prop(),但在回调中它绑定到了错误的元素,因此我必须执行常见的 var that = this 解决方法。尝试播放使用 .apply()/.call() 不能正常工作;我不知道为什么。在调用 this.prop(...) 之前仔细检查 console.log(this) 是否设置为您想要的对象
我提名这个答案作为转换到文档部分的候选者。清晰,完整,写得很好。
通过使用 removeAttr(),您完全删除了 disabled 属性本身 - 而 prop() 只是将属性的底层布尔值设置为 false。 我不相信这是真的。在 HTML 中,仅存在 disabled 属性就会禁用该元素。例如,拥有 <button disabled="false"></button> 不会启用按钮,必须删除该属性。通过调用 $('button').prop('disabled', false);,jQuery 将为您删除属性,正如我在 this codepen 中观察到的(检查以查看属性删除)。
U
Umesh Patil

删除禁用的属性使用,

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

并添加禁用属性使用,

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

享受 :)


M
Muthu Kumaran
<input type="text" disabled="disabled" class="inputDisabled" value="">
​<button id="edit">Edit</button>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

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

http://jsfiddle.net/ZwHfY/


D
Dhamu

像这样使用,

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

这个实际上对我有用。 prop('disabled', false) 出人意料地不起作用。
@Stefan 在这里同样的事情!你找出原因了吗?
我知道这是一个古老的线程,但如果有人仍然对此感到困惑,我的问题是该元素是一个 <a>,而 .prop('disabled', false) 不起作用。我将其更改为 <button>,现在可以使用
C
Community

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

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

Here is a working fiddle.


M
Mosam Prajapati

用于删除禁用的属性

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

用于添加禁用的属性

 $('#inputDisabled').attr('disabled', 'disabled' );

之前已经给出了这个答案,但它仍然是错误的。您将属性称为“属性”,这令人困惑。
r
rap-2-h

2018 年,没有 JQuery

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

document.getElementById('edit').addEventListener(event => {
    event.preventDefault();
    [...document.querySelectorAll('.inputDisabled')].map(e => e.disabled = false);
}); 

E
Er.gaurav soni

以为您可以轻松设置

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

L
Leniel Maccaferri

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

element.removeProp('disabled')

请注意,它是 removeProp 而不是 removeAttr

我在这里使用 jQuery 2.1.3


来自 jQuery 文档:重要提示:不应使用 .removeProp() 方法将这些属性设置为 false。移除原生属性后,将无法再次添加。有关详细信息,请参阅 .removeProp()。
j
jdgregson

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

elem.removeAttribute('disabled');

M
Milan Hettner

尝试特殊选择器:

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

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

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