使用jQuery切换输入禁用属性


189

这是我的代码:

$("#product1 :checkbox").click(function(){
    $(this)
        .closest('tr') // Find the parent row.
            .find(":input[type='text']") // Find text elements in that row.
                .attr('disabled',false).toggleClass('disabled') // Enable them.
                .end() // Go back to the row.
            .siblings() // Get its siblings
                .find(":input[type='text']") // Find text elements in those rows.
                .attr('disabled',true).removeClass('disabled'); // Disable them.
});

如何切换.attr('disabled',false);

我似乎在Google上找不到它。


为什么不能使用该字段的Disabled属性?$("input").get(0).disabled = isFalse;// jsfiddle.net/uAfhj
Shanimal

我找到了您可能会发现有用的DependsOn插件
Onshop 2014年

Answers:


445
$('#el').prop('disabled', function(i, v) { return !v; });

.prop()方法接受两个参数:

  • 属性名称(禁用,选中,选择)为真或假
  • 属性,可以是:
    • )-返回当前值。
    • 布尔值(true / false)-设置属性值。
    • 函数 -对找到的每个元素执行,返回值用于设置属性。有两个参数传递;第一个参数是索引(每个找到的元素增加0、1、2)。第二个参数是元素的当前(真/假)。

因此,在这种情况下,我使用了一个为我提供索引(i)和当前值(v)的函数,然后返回了当前值的相反值,因此属性状态被反转。


2
赞为(我相信).prop()是执行此操作的正确方法,并且被添加的目的恰是为了设置诸如disable =“ disabled”及其优雅的名称
Morvael

5
什么是iv
Matt R

@MattR我添加了简短的解释。
Arne 2015年

这是一个很好的答案!
LeBlaireau '16

6
作为更新,使用箭头功能看起来非常整洁:$('#el').prop('disabled', (i, v) => !v);
igneosaur

101

猜想要获得完全的浏览器可比性disabled应该由该值设置disabled或将其删除!
这是我刚刚制作的一个小插件:

(function($) {
    $.fn.toggleDisabled = function() {
        return this.each(function() {
            var $this = $(this);
            if ($this.attr('disabled')) $this.removeAttr('disabled');
            else $this.attr('disabled', 'disabled');
        });
    };
})(jQuery);

示例链接

编辑:更新了示例链接/代码以保持可链接性!
编辑2:
基于@lonesomeday评论,这是增强的版本:

(function($) {
    $.fn.toggleDisabled = function(){
        return this.each(function(){
            this.disabled = !this.disabled;
        });
    };
})(jQuery);

28
这可能有效,但是会很慢,因为您一直在创建新的jQuery对象。$.fn.toggleDisabled = function(){ return this.each(function(){ this.disabled = !this.disabled; });}是你所需要的全部。
lonesomeday

@lonesomeday:我本来打算发布这个,但是我倾向于认为这不是设置/取消设置disabled属性的正确方法。无论如何,如果您可以确认这是跨浏览器的解决方案,我将更新我的答案。
ifaour 2011年

2
对于任何未来的Google员工,此解决方案对于“必需”属性同样适用。
skybondsor 2014年

prop是Arne所说的自1.6以来更好的方法。
Ciro Santilli郝海东冠状病六四事件法轮功


5

单击复选框即可更新的另一个简单选项。

HTML:

<input type="checkbox" id="checkbox/>
<input disabled type="submit" id="item"/>

jQuery的:

$('#checkbox').click(function() {
    if (this.checked) {
        $('#item').prop('disabled', false); // If checked enable item       
    } else {
        $('#item').prop('disabled', true); // If checked disable item                   
    }
});

实际应用:链接


6
摆脱了if阻滞$('#item').prop('disabled', this.checked);
纳伊姆Sarfraz

2

不久之后,由于使用了@arne,我创建了这个类似的小函数来处理应该禁用和隐藏输入或启用和显示输入的位置:

function toggleInputState(el, on) {
  // 'on' = true(visible) or false(hidden)
  // If a field is to be shown, enable it; if hidden, disable it.
  // Disabling will prevent the field's value from being submitted
  $(el).prop('disabled', !on).toggle(on);
}

然后,只需使用以下命令切换jQuery对象(例如$('input [name =“ something”]'))):

toggleInputState(myElement, myBoolean)

1

回调语法非常简单attr

$("#product1 :checkbox").click(function(){
  $(this)
   .closest('tr') // find the parent row
       .find(":input[type='text']") // find text elements in that row
           .attr('disabled',function(idx, oldAttr) {
               return !oldAttr; // invert disabled value
           })
           .toggleClass('disabled') // enable them
       .end() // go back to the row
       .siblings() // get its siblings
           .find(":input[type='text']") // find text elements in those rows
               .attr('disabled',function(idx, oldAttr) {
                   return !oldAttr; // invert disabled value
               })
               .removeClass('disabled'); // disable them
});
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.