JQuery 1.6.2禁用复选框禁用标签

时间:2011-08-16 21:07:30

标签: jquery checkbox label

我们有一些现有的JavaScript用于启用/禁用一堆复选框。从JQuery 1.4.4升级到1.6.2后,它停止了工作。以下是每个复选框的HTML外观:

<li class="option_row">
  <input id="checked27" class="checkbox normal" type="checkbox" disabled="disabled" checked="checked">
    <label class="disabled" for="checked27">
      <span>Foo</span>
  </label>
</li>

启用该复选框的JavaScript附加到链接(类“enableCheckboxesLink”):

var checkboxes = $('.checkbox');
$('.enableCheckboxesLink').click(function() {
  checkboxes.attr('disabled', '').next().removeClass('disabled');
});

换句话说,我们将JavaScript附加到“enableCheckboxesLink”,它会找到所有复选框(即所有带有“checkbox”类的元素)并删除“disabled”属性。

当我在JQuery 1.6.2中停止代码时,我可以看到var“复选框”包含例如“input#checked27.checkbox”,这是上面的复选框。但是当我执行上面的最后一行时,它只会从标签中删除“禁用”属性,而不是复选框。为什么?这是JQuery 1.6.2中的错误吗?它在JQuery 1.4.4中工作(也就是说,上面的代码同时启用了复选框和标签)。

4 个答案:

答案 0 :(得分:1)

jQuery 1.6引入了prop()方法,建议用于设置disabled属性。请参阅this documentation

所以,这应该可以解决你的问题:

checkboxes.prop('disabled', false).next().removeClass('disabled');

这将完全删除'disabled'属性,而不是将其设置为空字符串,这仍然意味着它被禁用。

答案 1 :(得分:0)

答案 2 :(得分:0)

checkboxes.attr('disabled', '').next().removeClass('disabled');

删除禁用类的原因是next()。removeClass('disabled') (取下一个元素并删除禁用的类)

我无法理解为什么不删除复选框,为什么不删除:

var checkboxes = $('.checkbox');

并改变:

checkboxes.attr('disabled', '').next().removeClass('disabled');

为:

$('.checkbox').attr('disabled', '').next().removeClass('disabled');

答案 3 :(得分:0)

您可以使用以下代码,使用 attr()方法删除 disabled =“disabled”属性,并将disabled设置为 false

var checkboxes = $('.checkbox');
$('.enableCheckboxesLink').click(function() {
  checkboxes.prop('disabled', false).next().removeClass('disabled');
});