我必须先禁用输入,然后点击链接启用它们。
这是我到目前为止所尝试的,但它不起作用。
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'));
});
答案 0 :(得分:719)
始终使用 prop()
方法在使用jQuery时启用或禁用元素(请参阅下面的原因)。
在你的情况下,它将是:
$("#edit").click(function(event){
event.preventDefault();
$('.inputDisabled').prop("disabled", false); // Element(s) are now enabled.
});
为什么在使用
prop()
/attr()
执行此操作时使用removeAttr()
?
基本上,在获取或设置属性时应使用prop()
(例如autoplay
,checked
,disabled
和{{1} } 在其他人中)。
通过使用required
,您将完全删除removeAttr()
属性本身 - 而disabled
仅将属性的基础布尔值设置为false。
虽然您想要 使用prop()
/ attr()
完成 ,但这并不意味着应该完成(并且可能导致奇怪/有问题的行为,如本例所示。)
以下摘录(摘自jQuery documentation for prop())更详细地解释了这些要点:
“属性和属性之间的区别非常重要 具体情况。在jQuery 1.6之前,有时会使用
removeAttr()
方法 在检索某些属性时考虑了属性值, 这可能会导致行为不一致。从jQuery 1.6开始,.attr()
方法提供了一种显式检索属性值的方法.prop()
检索属性。““属性通常会影响DOM元素的动态状态 更改序列化的HTML属性。示例包括
.attr()
输入元素的属性,输入的value
属性和 按钮,或复选框的disabled
属性。checked
方法 应该用来设置.prop()
和disabled
而不是checked
方法。.attr()
方法应该用于获取和设置.val()
“。
答案 1 :(得分:37)
<input type="text" disabled="disabled" class="inputDisabled" value="">
<button id="edit">Edit</button>
$("#edit").click(function(event){
event.preventDefault();
$('.inputDisabled').removeAttr("disabled")
});
答案 2 :(得分:34)
删除已停用的属性,
$("#elementID").removeAttr('disabled');
并添加禁用属性使用
$("#elementID").prop("disabled", true);
享受:)
答案 3 :(得分:15)
像这样使用,
<强> 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
});
答案 4 :(得分:9)
我认为你正试图切换禁用状态,如果你应该使用它(来自this question):
$(".inputDisabled").prop('disabled', function (_, val) { return ! val; });
答案 5 :(得分:4)
这是唯一对我有用的代码:
element.removeProp('disabled')
请注意,它是removeProp
而不是removeAttr
。
我在这里使用jQuery 2.1.3
。
答案 6 :(得分: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);
}
}
);
});
答案 7 :(得分:2)
$('#inputDisabled').removeAttr('Disabled');
$('#inputDisabled').attr('disabled', 'disabled' );
答案 8 :(得分:1)
我知道这个问题是关于JQuery的:这个答案只是FYI。
document.getElementById('edit').addEventListener(event => {
event.preventDefault();
[...document.querySelectorAll('.inputDisabled')].map(e => e.disabled = false);
});
答案 9 :(得分:0)
尝试特殊选择器:
不工作:$('#ID_Unit').removeAttr("disabled");
作品:$('select[id=ID_Unit]:disabled').removeAttr("disabled");
所有“选择”控件$('select:disabled').removeAttr("disabled");
“select”是控件类型,如“type”等
答案 10 :(得分:-1)
这个问题特别提到了jQuery,但是如果你想在没有jQuery的情况下完成这个,那么vanilla JavaScript中的等价物就是:
elem.removeAttribute('disabled');