我们有一些现有的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中工作(也就是说,上面的代码同时启用了复选框和标签)。
答案 0 :(得分:1)
jQuery 1.6引入了prop()方法,建议用于设置disabled属性。请参阅this documentation。
所以,这应该可以解决你的问题:
checkboxes.prop('disabled', false).next().removeClass('disabled');
这将完全删除'disabled'属性,而不是将其设置为空字符串,这仍然意味着它被禁用。
答案 1 :(得分:0)
请尝试使用removeAttr('disabled')
。见http://docs.jquery.com/Frequently_Asked_Questions#How_do_I_disable.2Fenable_a_form_element.3F
答案 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');
});