使用jQuery切换输入禁用属性

时间:2011-01-15 20:37:21

标签: jquery toggle attr

这是我的代码:

$("#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上找到它。

6 个答案:

答案 0 :(得分:398)

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

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

  • 属性名称(已停用,已选中,已选中)任何真或假的内容
  • 属性,可以是:
    • empty ) - 返回当前值。
    • boolean (true / false) - 设置属性值。
    • function - 对每个找到的元素执行,返回的值用于设置属性。有两个论点通过;第一个参数是索引(0,1,2,每个找到的元素增加)。第二个参数是元素的当前(true / false)。

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

答案 1 :(得分: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);

Example link

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

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

答案 2 :(得分:19)


    $('#checkbox').click(function(){
        $('#submit').attr('disabled', !$(this).attr('checked'));
    });

答案 3 :(得分: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)

答案 4 :(得分:2)

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

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                   
    }
});

行动中:link

答案 5 :(得分: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
});