我必须首先禁用输入,然后单击链接以启用它们。
这是我到目前为止所尝试的,但它不起作用。
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'));
});
总是在使用 jQuery 时使用 prop()
方法来启用或禁用元素(原因见下文)。
在您的情况下,它将是:
$("#edit").click(function(event){
event.preventDefault();
$('.inputDisabled').prop("disabled", false); // Element(s) are now enabled.
});
当您可以使用 attr()/removeAttr() 来执行此操作时,为什么还要使用 prop()?
基本上,在获取或设置 属性(例如 autoplay
、checked
、disabled
和 required
等)时应使用 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() 方法获取和设置值。"
删除禁用的属性使用,
$("#elementID").removeAttr('disabled');
并添加禁用属性使用,
$("#elementID").prop("disabled", true);
享受 :)
<input type="text" disabled="disabled" class="inputDisabled" value="">
<button id="edit">Edit</button>
$("#edit").click(function(event){
event.preventDefault();
$('.inputDisabled').removeAttr("disabled")
});
像这样使用,
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
});
<a>
,而 .prop('disabled', false)
不起作用。我将其更改为 <button>
,现在可以使用
我认为您正在尝试切换禁用状态,以防万一您应该使用它(来自 this question):
$(".inputDisabled").prop('disabled', function (_, val) { return ! val; });
用于删除禁用的属性
$('#inputDisabled').removeAttr('Disabled');
用于添加禁用的属性
$('#inputDisabled').attr('disabled', 'disabled' );
2018 年,没有 JQuery
我知道这个问题是关于 JQuery 的:这个答案仅供参考。
document.getElementById('edit').addEventListener(event => {
event.preventDefault();
[...document.querySelectorAll('.inputDisabled')].map(e => e.disabled = false);
});
以为您可以轻松设置
$(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);
}
}
);
});
这是唯一对我有用的代码:
element.removeProp('disabled')
请注意,它是 removeProp
而不是 removeAttr
。
我在这里使用 jQuery 2.1.3
。
这个问题特别提到了 jQuery,但如果您希望在没有 jQuery 的情况下完成此操作,则原版 JavaScript 中的等价物是:
elem.removeAttribute('disabled');
尝试特殊选择器:
不工作:$('#ID_Unit').removeAttr("disabled");
工作:$('select[id=ID_Unit]:disabled').removeAttr("disabled");
所有“选择”控件$('select:disabled').removeAttr("disabled");
“选择”是控制类型,如“类型”等。
不定期副业成功案例分享
attr
与prop
:w3.org/TR/html5/forms.html#concept-input-checked-dirty 除了内部 jQuery 变通方法魔术。this
(this.prop("disabled", false)
指向的元素上执行了.prop()
,但在回调中它绑定到了错误的元素,因此我必须执行常见的var that = this
解决方法。尝试播放使用.apply()
/.call()
不能正常工作;我不知道为什么。在调用this.prop(...)
之前仔细检查console.log(this)
是否设置为您想要的对象disabled
属性就会禁用该元素。例如,拥有<button disabled="false"></button>
不会启用按钮,必须删除该属性。通过调用$('button').prop('disabled', false);
,jQuery 将为您删除属性,正如我在 this codepen 中观察到的(检查以查看属性删除)。