$input.disabled = true;
或者$input.disabled = "disabled";
哪个是标准的方法?相反地,你如何启用一个被禁用的输入框?
$input.disabled = true;
或者$input.disabled = "disabled";
哪个是标准的方法?相反地,你如何启用一个被禁用的输入框?
要更改disabled
属性,您应该使用.prop()
函数。
$("input").prop('disabled', true);
$("input").prop('disabled', false);
.prop()
函数不存在,但是.attr()
可以实现类似的功能:
设置disabled属性。
$("input").attr('disabled','disabled');
.removeAttr()
。$("input").removeAttr('disabled');
如果你只需要处理一个元素,你可以始终依赖于实际的DOM对象,这可能比其他两个选项稍微快一些:
// assuming an event handler thus 'this'
this.disabled = true;
.prop()
或.attr()
方法的优点是可以为一组选择的项目设置属性。
注意:在1.6版本中,有一个.removeProp()
方法,听起来很像removeAttr()
,但不应该用于删除像'disabled'
这样的本地属性。摘自文档:
注意:不要使用此方法删除像checked、disabled或selected等本地属性。 这将完全删除该属性,并且一旦删除,就无法再次添加到元素中。相反,请使用.prop()将这些属性设置为false。
事实上,我怀疑这种方法存在许多合法的用途。布尔属性的处理方式是将它们设为false,而不是像在1.5版本中的“属性”对应项中那样“删除”它们。
':input'
,而不仅是 'input'
。后者只会选择实际的<input>元素。 - Cornel Massoninput
、textarea
、select
和button
要比使用:input
选择器更好一些--因为:input
作为选择器效率很低,它需要选择*
然后循环每个元素并按标签名过滤--如果你直接传递这4个标签名选择器,则会快得多。另外,:input
不是标准的CSS选择器,所以使用querySelectorAll
可能带来的性能提升都会丧失。 - gnarf.removeProp("disabled")
会导致属性完全删除并且无法再次添加,这是由@ThomasDavidBaker指出的问题。而在其他一些浏览器(例如Firefox)上可以正常工作。我们应该非常小心。在这种情况下,应始终使用.prop("disabled",false)
。 - Sandeepan Nath只是为了新惯例和使其适应未来(除非ECMA6发生重大变化)而已:
$(document).on('event_name', '#your_id', function() {
$(this).removeAttr('disabled');
});
与
$(document).off('event_name', '#your_id', function() {
$(this).attr('disabled','disabled');
});
$(document).on('event_name', '#your_id', function() {...})
而不是 $('#your_id').on('event_name', function() {...})
。根据jQuery .on()文档所述,前者使用委派机制,并监听所有冒泡到 document
的 event_name
事件,并检查它们是否与匹配的 #your_id
相符。后者仅监听 $('#your_id')
事件,因此可扩展性更好。 - Peter V. Mørch// Disable #x
$( "#x" ).prop( "disabled", true );
// Enable #x
$( "#x" ).prop( "disabled", false );
//To disable
$('.someElement').attr('disabled', 'disabled');
//To enable
$('.someElement').removeAttr('disabled');
// OR you can set attr to ""
$('.someElement').attr('disabled', '');
$("input")[0].disabled = true;
或者$("input")[0].disabled = false;
有许多方法可以使用它们来启用/禁用任何元素:
方法1
$("#txtName").attr("disabled", true);
方法2
$("#txtName").attr("disabled", "disabled");
如果您正在使用jQuery 1.7或更高版本,则请使用prop()而不是attr()。$("#txtName").prop("disabled", "disabled");
如果您希望启用任何元素,则只需执行与禁用相反的操作。但是,jQuery提供了另一种方法来删除任何属性。
方法1$("#txtName").attr("disabled", false);
方法二
$("#txtName").attr("disabled", "");
方法三
$("#txtName").removeAttr("disabled");
如果您使用的是jQuery 1.7或更高版本,则使用prop()而不是attr()。就是这样。这就是如何使用jQuery启用或禁用任何元素。
像这样使用,
$( "#id" ).prop( "disabled", true );
$( "#id" ).prop( "disabled", false );
如果您只想反转当前状态(例如切换按钮行为):
$("input").prop('disabled', ! $("input").prop('disabled') );
如评论中所述,以下代码也可以切换属性:
$("input").prop('disabled', function(i, v) { return !v; });
您可以在代码的全局位置放置以下内容:
$.prototype.enable = function () {
$.each(this, function (index, el) {
$(el).removeAttr('disabled');
});
}
$.prototype.disable = function () {
$.each(this, function (index, el) {
$(el).attr('disabled', 'disabled');
});
}
然后你可以写一些东西,比如:
$(".myInputs").enable();
$("#otherInput").disable();
disabled
属性时,应该使用prop
而不是attr
才能正确工作(假设使用jQuery 1.6或更高版本)。 - iCollect.it Ltdattr
的缺点是什么?我在一些项目中使用上述代码,就我所记得的,它可以正常工作。 - Nicu Surdu2018年更新:
现在不再需要使用jQuery,document.querySelector
或document.querySelectorAll
(用于多个元素)已经几乎完全取代了$,并且还有更明确的方法,如getElementById
,getElementsByClassName
,getElementsByTagName
禁用“input-checkbox”类的一个字段
document.querySelector('.input-checkbox').disabled = true;
document.querySelectorAll('.input-checkbox').forEach(el => el.disabled = true);
这对我有效
$("#values:input").attr("disabled",true);
$("#values:input").attr("disabled",false);