JQuery复选框失败(为什么它不会更改“已检查”attr?)

时间:2011-02-23 20:18:07

标签: jquery checkbox

我希望根据用户点击编辑复选框为表单切换禁用/启用。简单的东西。

当禁用组件工作时,复选框的默认检查行为将被覆盖。我甚至试图返回attr(“checked”,true)以使其工作但没有骰子。我假设这可能与我的标记有关(将复选框放在div中)。无法弄清楚。

$(function(){
$('#target :input').attr('disabled','disabled');

$(':checkbox').toggle(
    function(){
        $(this).attr("checked",true);
        $('#target :input').attr('disabled',false);

    },
    function(){
        $('#target:input').attr('disabled','disabled');         
        $(this).attr("checked", false);


});
});

谢谢, 布伦丹

6 个答案:

答案 0 :(得分:4)

正如@ Devbook.co.uk所指出的,toggle-event[docs]方法打破了复选框的默认行为。

一种解决方案是使用.change()事件以及复选框的this.checked属性。

示例: http://jsfiddle.net/Efpr6/

$('#target :input').attr('disabled', 'disabled');

$('#toggler').change(function() {
    $('#target :input').attr('disabled', !this.checked);
});

答案 1 :(得分:3)

尝试$(this).attr('checked', 'checked')进行检查,然后$(this).removeAttr('checked')取消选中。

答案 2 :(得分:1)

$(this).attr("checked",true);更改为$(this).attr("checked","checked");

答案 3 :(得分:1)

是的,您可能认为应该具有值true或false的属性,往往将属性名称用作值,如下所示:

checked="checked"
disabled="disabled"

有些浏览器会接受checked =“true”,但绝对不是最佳做法。

答案 4 :(得分:1)

认为我找到了你的解决方案 - 看看这个问题

Jquery toggle event is messing with checkbox value

似乎jQuery切换对复选框不起作用。

答案 5 :(得分:0)

试试这个:

$(this).prop('checked', false);
$(this).prop('checked', true);

看到这个: http://bugs.jquery.com/ticket/10248

这对我有用。