$input.disabled = true;
或者
$input.disabled = "disabled";
哪个是标准方式?而且,相反,如何启用禁用的输入?
jQuery 1.6+
要更改 disabled
属性,您应该使用 .prop()
函数。
$("input").prop('disabled', true);
$("input").prop('disabled', false);
jQuery 1.5 及以下
.prop()
函数不存在,但 .attr()
类似:
设置禁用属性。
$("input").attr('disabled','disabled');
要再次启用,正确的方法是使用 .removeAttr()
$("input").removeAttr('disabled');
在任何版本的 jQuery
你总是可以依赖实际的 DOM 对象,如果你只处理一个元素,它可能比其他两个选项快一点:
// assuming an event handler thus 'this'
this.disabled = true;
使用 .prop()
或 .attr()
方法的优点是您可以为一组选定的项目设置属性。
注意: 在 1.6 中,有一个 .removeProp()
方法,听起来很像 removeAttr()
,但它不应该使用在像 'disabled'
这样的原生属性上文档:
注意:请勿使用此方法删除本机属性,例如选中、禁用或选中。这将完全删除该属性,并且一旦删除,就不能再次将其添加到元素中。使用 .prop() 将这些属性设置为 false。
事实上,我怀疑这种方法有很多合法用途,布尔道具的完成方式是你应该将它们设置为 false 而不是像 1.5 中的“属性”对应物那样“删除”它们
只是为了新的约定 && 使其适应未来(除非 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() documentation 中所述,前者使用委托并侦听冒泡到 document
的 所有 event_name
事件并检查它们是否匹配 #your_id
。后者仅专门监听 $('#your_id')
事件,并且可以更好地扩展。
// Disable #x
$( "#x" ).prop( "disabled", true );
// Enable #x
$( "#x" ).prop( "disabled", false );
有时您需要禁用/启用表单元素,例如 input 或 textarea。 Jquery 通过将禁用属性设置为“禁用”来帮助您轻松实现这一点。例如:
//To disable
$('.someElement').attr('disabled', 'disabled');
要启用禁用元素,您需要从此元素中删除“禁用”属性或清空它的字符串。例如:
//To enable
$('.someElement').removeAttr('disabled');
// OR you can set attr to ""
$('.someElement').attr('disabled', '');
参考:http://garmoncheg.blogspot.fr/2011/07/how-to-disableenable-element-with.html
$("input")[0].disabled = true;
或者
$("input")[0].disabled = false;
您可以通过多种方式启用/禁用任何元素:
方法一
$("#txtName").attr("disabled", true);
方法二
$("#txtName").attr("disabled", "disabled");
如果您使用的是 jQuery 1.7 或更高版本,请使用 prop(),而不是 attr()。
$("#txtName").prop("disabled", "disabled");
如果您希望启用任何元素,那么您只需执行与禁用它的操作相反的操作。然而 jQuery 提供了另一种删除任何属性的方法。
方法一
$("#txtName").attr("disabled", false);
方法二
$("#txtName").attr("disabled", "");
方法 3
$("#txtName").removeAttr("disabled");
同样,如果您使用 jQuery 1.7 或更高版本,请使用 prop(),而不是 attr()。那是。这是您使用 jQuery 启用或禁用任何元素的方式。
您可以将其放在代码中的全局位置:
$.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
和 not attr
以使其正常工作(假设 jQuery 1.6 或更高版本)。
attr
有什么缺点?我在一些项目中使用上面的代码,据我记得它工作正常
checked
属性。使用 attr
不会得到相同的结果。
像这样使用,
$( "#id" ).prop( "disabled", true );
$( "#id" ).prop( "disabled", false );
如果您只想反转当前状态(如切换按钮行为):
$("input").prop('disabled', ! $("input").prop('disabled') );
这对我有用
$("#values:input").attr("disabled",true);
$("#values:input").attr("disabled",false);
2018 年更新:
现在不再需要 jQuery 并且已经有一段时间了,因为 document.querySelector
或 document.querySelectorAll
(用于多个元素)与 $ 几乎完全相同,加上更明确的 getElementById
、getElementsByClassName
、getElementsByTagName
禁用“输入复选框”类的一个字段
document.querySelector('.input-checkbox').disabled = true;
或多个元素
document.querySelectorAll('.input-checkbox').forEach(el => el.disabled = true);
您可以使用 jQuery prop() 方法来禁用或启用表单元素或使用 jQuery 动态控制。 prop() 方法需要 jQuery 1.6 及更高版本。
例子:
<script type="text/javascript">
$(document).ready(function(){
$('form input[type="submit"]').prop("disabled", true);
$(".agree").click(function(){
if($(this).prop("checked") == true){
$('form input[type="submit"]').prop("disabled", false);
}
else if($(this).prop("checked") == false){
$('form input[type="submit"]').prop("disabled", true);
}
});
});
</script>
禁用:
$('input').attr('readonly', true); // Disable it.
$('input').addClass('text-muted'); // Gray it out with bootstrap.
使能够:
$('input').attr('readonly', false); // Enable it.
$('input').removeClass('text-muted'); // Back to normal color with bootstrap.
为输入类型禁用 true :
在特定输入类型的情况下(例如文本类型输入)
$("input[type=text]").attr('disabled', true);
对于所有类型的输入类型
$("input").attr('disabled', true);
$("input[name=method]").prop('disabled', true);
禁用输入字段的另一种方法是使用 jQuery 和 css,如下所示:
jQuery("#inputFieldId").css({"pointer-events":"none"})
并启用相同的输入,代码如下:
jQuery("#inputFieldId").css({"pointer-events":""})
<html>
<body>
Name: <input type="text" id="myText">
<button onclick="disable()">Disable Text field</button>
<button onclick="enable()">Enable Text field</button>
<script>
function disable() {
document.getElementById("myText").disabled = true;
}
function enable() {
document.getElementById("myText").disabled = false;
}
</script>
</body>
</html>
我使用了@gnarf 答案并将其添加为函数
$.fn.disabled = function (isDisabled) {
if (isDisabled) {
this.attr('disabled', 'disabled');
} else {
this.removeAttr('disabled');
}
};
然后像这样使用
$('#myElement').disable(true);
2018 年,没有 JQuery (ES6)
禁用所有 input
:
[...document.querySelectorAll('input')].map(e => e.disabled = true);
使用 id="my-input"
禁用 input
document.getElementById('my-input').disabled = true;
问题在于 JQuery,仅供参考。
在 jQuery Mobile 中:
对于禁用
$('#someselectElement').selectmenu().selectmenu('disable').selectmenu('refresh', true);
$('#someTextElement').textinput().textinput('disable');
对于启用
$('#someselectElement').selectmenu().selectmenu('enable').selectmenu('refresh', true);
$('#someTextElement').textinput('enable');
':input'
,而不仅仅是'input'
。后者只选择实际的 <input>元素。input,textarea,select,button
比:input
好用一点 -:input
作为选择器效率很低,因为它必须选择*
然后循环遍历每个元素并按标记名过滤 - 如果您传递 4 标记名选择器直接它要快得多。此外,:input
不是标准 CSS 选择器,因此可能从querySelectorAll
获得的任何性能提升都将丢失.removeProp("disabled")
会导致“属性被完全删除且不再被添加”的问题,在 Chrome 等浏览器的情况下,而在 Firefox 等浏览器上运行良好。我们在这里真的应该小心。始终使用.prop("disabled",false)