禁用/启用jQuery输入?


Answers:


3810

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' 文档中的“摘录”之类的本机属性上使用

注意:请勿使用此方法删除本机属性,例如选中,禁用或选中。这将完全删除该属性,并且一旦删除,就不能再次将其添加到element中。使用.prop()将这些属性设置为false。

实际上,我对此方法有很多合法用途表示怀疑,布尔道具的使用方式应该设置为false,而不是像1.5中的“属性”对应那样“删除”它们。


9
顺便说一句,请记住,如果要禁用所有表单输入控件-包括。复选框,收音机,文本区域等-您必须选择':input',而不仅仅是'input'。后者仅选择实际的<input>元素。
Cornel Masson

35
@CornelMasson的input,textarea,select,button使用要好于:input- :input因为选择器效率很低,因为它必须先选择*然后循环遍历每个元素并按标记名进行过滤-如果直接传递4个标记名选择器,速度会更快。而且,:input它不是标准的CSS选择器,因此,任何可能的性能提升都querySelectorAll将丢失
gnarf 2012年

3
这是否只是阻止用户访问它,还是实际上将其从Web请求中删除了?
OneChillDude

4
.removeProp("disabled")如@ThomasDavidBaker所指出的那样,如果使用Chrome之类的浏览器,则使用会导致“属性被完全删除而不再添加”的问题,而在诸如Firefox的某些浏览器上运行良好。我们在这里应该非常小心。始终.prop("disabled",false)改用
Sandeepan Nath 2014年

6
.prop或.attr都不足以禁用锚点元素。.prop甚至不会使“控件”变灰(.attr会变灰,但href仍处于活动状态)。您还必须添加一个调用preventDefault()的click事件处理程序。
Jeff Lowery 2014年

61

只是为了新的约定和使其适应性发展(除非ECMA6(????)发生了重大变化:

$(document).on('event_name', '#your_id', function() {
    $(this).removeAttr('disabled');
});

$(document).off('event_name', '#your_id', function() {
    $(this).attr('disabled','disabled');   
});

12
笑话!为什么要$(document).on('event_name', '#your_id', function() {...})代替$('#your_id').on('event_name', function() {...})。如jQuery .on()文档中所述,前者使用委托并监听所有 event_name冒泡的事件document并检查它们是否匹配#your_id。后者$('#your_id')仅侦听事件,并且扩展性更好。
Peter V.Mørch'13

23
前者适用于随时插入DOM中的元素,后者仅适用于当时存在的元素。
crazymykl

1
@crazymykl正确,但您不应添加页面上已经存在ID的元素。
SepehrM 2016年

33
    // Disable #x
    $( "#x" ).prop( "disabled", true );
    // Enable #x
    $( "#x" ).prop( "disabled", false );

有时您需要禁用/启用表单元素,例如input或textarea。jQuery通过将disable属性设置为“ disabled”,可以轻松实现此目的。例如:

  //To disable 
  $('.someElement').attr('disabled', '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


13
$("input")[0].disabled = true;

要么

$("input")[0].disabled = false;

2
当然,这个问题要求使用jQuery,这正在改变普通JavaScript的状态,但是它可以工作。
basic6 2014年

1
这会更改JavaScript中的状态,但仍使用jQuery选择器来获取第一个输入。
cjsimon

3
但是我不认为我们在这里制作jquery的百科全书,如果答案
可行

8

您可以将其放在代码的全局位置:

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

3
虽然包装功能很方便,但您应该使用prop不是 attr使用disabled属性才能使其正常工作(假设jQuery 1.6或更高版本)。
Gone Coding

1
@TrueBlueAussie使用的缺点是attr什么?我在某些项目中使用了上面的代码,据我所知它可以正常工作
Nicu Surdu,2015年

1
明显的例外是具有幕后属性的控件。最著名的是checked复选框的属性。使用attr不会产生相同的结果。
Gone Coding

7

如果您只想反转当前状态(例如切换按钮行为):

$("input").prop('disabled', ! $("input").prop('disabled') );

1
谢谢,我对拨动开关有相同的看法;$(“ input”)。prop('disabled',function(i,v){return!v;});
Floww

5

使用它们的方法有很多,您可以启用/禁用任何元素

方法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);

方法2

$("#txtName").attr("disabled", "");

方法3

$("#txtName").removeAttr("disabled");

同样,如果您使用的是jQuery 1.7或更高版本,请使用prop()而不是attr()。那是。这是使用jQuery启用或禁用任何元素的方式。


2

2018年更新:

现在有没有必要jQuery和它已经有一段时间document.querySelectordocument.querySelectorAll(多个元素)做几乎完全同样的工作$,再加上更明确的人getElementByIdgetElementsByClassNamegetElementsByTagName

禁用“输入复选框”类的一个字段

document.querySelector('.input-checkbox').disabled = true;

或多个元素

document.querySelectorAll('.input-checkbox').forEach(el => el.disabled = true);

1
这个问题专门询问有关jQuery的问题...但是同样,您的陈述是正确的,并且值得一提的是,当存在多个元素时,不需要为此使用jQuery 。
ADyson

2

您可以使用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>

1

禁用:

$('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.

1

对输入类型禁用true:

在特定输入类型的情况下(例如,文本类型输入

$("input[type=text]").attr('disabled', true);

对于所有输入类型

$("input").attr('disabled', true);

1
谢谢,这帮助我隔离了输入名称。 $("input[name=method]").prop('disabled', true);
哈里·波什

1

这对我有用

$("#values:input").attr("disabled",true);
$("#values:input").attr("disabled",false);

0

我使用@gnarf答案并将其添加为功能

   $.fn.disabled = function (isDisabled) {
     if (isDisabled) {
       this.attr('disabled', 'disabled');
     } else {
       this.removeAttr('disabled');
     }
   };

然后像这样使用

$('#myElement').disable(true);

0

2018年,不含JQuery(ES6)

禁用所有input

[...document.querySelectorAll('input')].map(e => e.disabled = true);

禁止input使用id="my-input"

document.getElementById('my-input').disabled = true;

现在的问题是 JQuery的,它只是供参考。




-1
<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>

1
在审核队列中:我可以请您在答案周围添加更多背景信息。仅代码的答案很难理解。如果您可以在帖子中添加更多信息,它将对提问者和将来的读者都有帮助。
RBT

-1

在jQuery Mobile中:

禁用

$('#someselectElement').selectmenu().selectmenu('disable').selectmenu('refresh', true);
$('#someTextElement').textinput().textinput('disable');

启用

$('#someselectElement').selectmenu().selectmenu('enable').selectmenu('refresh', true);
$('#someTextElement').textinput('enable');
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.