使用Bootstrap按钮伪造复选框行为 - 复选框?

时间:2013-03-30 09:35:22

标签: javascript jquery javascript-events twitter-bootstrap checkbox

我正在尝试使用Bootstrap的data-toggle属性来允许用户选择权限级别。

我已将simple demo on JSFiddle放在一起,预期值为:

  • 无:0
  • 用户:1
  • 管理员:2
  • 用户+管理员= 3

问题是计算出的值似乎比实际切换按钮落后一步。

我很确定这是一个非常简单的问题,但到目前为止,解决方案已经设法让我望而却步。


显然,我需要在这里复制JSFiddle代码:

$(document).ready(function () {
    $('#privileges button').click(function () {
        var privileges = 0;

        //$(this).addClass('active');

        $('#privileges button').each(function () {
            if ($(this).hasClass('active')) {
                privileges += parseInt($(this).attr('value'));
            }
        });

        $('input[id="user[privileges]"]').val(privileges);
    });
});

HTML:

<label for="user[privileges]">Privileges</label>
<input id="user[privileges]" name="user[privileges]" type="text" value="0">
<div id="privileges" class="btn-group" data-toggle="buttons-checkbox" style="width: 100%;">
    <button type="button" class="btn" style="width: 50%;" value="1">User</button>
    <button type="button" class="btn" style="width: 50%;" value="2">Administrator</button>
</div>

1 个答案:

答案 0 :(得分:3)

试试此代码

$(document).ready(function () {
    $('#privileges button').click(function () {
        var privileges = 0;
        var alredySelected = $(this).hasClass('active');

        //$(this).addClass('active');

        $('#privileges button').each(function () {
            if ($(this).hasClass('active')) {
                privileges += parseInt($(this).attr('value'));
            }
        });
        if(alredySelected){
            privileges = parseInt(privileges) - parseInt($(this).val());
        } else {
            privileges = parseInt(privileges) + parseInt($(this).val());
        }

        $('input[id="user[privileges]"]').val( privileges);
    });


});

http://jsfiddle.net/28xsr/1/