使用jQuery切换输入禁用属性

这是我的代码:

$("#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);?

我在谷歌上找不到。

205740 次浏览

使用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
});
disabled应该由值disabled设置,否则将被删除!< br > 下面是我刚刚创建的一个小插件:

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

例子链接

EDIT:更新示例链接/代码以保持可链性!< br > 编辑2:< br > 根据@lonesomeday的评论,这里是一个增强版本:

(function($) {
$.fn.toggleDisabled = function(){
return this.each(function(){
this.disabled = !this.disabled;
});
};
})(jQuery);
$('#el').prop('disabled', (i, v) => !v);

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

  • 属性的名字 (disabled, checked, selected)为真或假的任何值
  • 属性价值,可以是:
  • () -返回当前值。
  • 布尔 (true/false) -设置属性值。
  • 函数 -为每个找到的元素执行,返回值用于设置属性。传递了两个参数;第一个参数是指数(0,1,2,为每个找到的元素递增)。第二个参数是元素当前的价值 (true/false)。

因此,在本例中,我使用了一个函数,它为我提供了索引(I)和当前值(v),然后我返回了与当前值相反的值,因此属性状态颠倒了。



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


过了一段时间,感谢@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)

另一个简单的选项是单击复选框进行更新。

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

在行动:链接