Javascript中已选中复选框的逻辑分离

时间:2014-03-31 08:31:10

标签: javascript jquery checkbox

有没有办法让这项工作?

我在jquery对话框中有4个复选框,每个复选框都包含base64url代码 通过关闭对话框,我想获得新的base64url代码。

这就是我想要做的。

  1. 搜索选中的复选框
    (例如选择Layer1,Layer2和Layer3)

  2. 将每个值从base64url转换为十进制
    (第1层:'gAAAAOAAAA'至'320000140000',
    第2层:' _ __ BAIEI'到'636363636310848',
    第3层:'gAAAAAAADA'到'320000000030')

  3. 实施“OR”操作(逻辑分离)
    (每层的第1个十进制数是32,63,32。所以在OR运算之后,它是63.)

  4. 将最终值从十进制转换为base64url
    (图层(最终):'6363636363150878'到' _ __ PAIHI')
  5. 我做了第一步如下。

    selected = [
     'gAAAAOAAAA',//Layer1
     '_____BAIEI',//Layer2
     'gAAAAAAADA',//Layer3
     'H-AAAgAEAA',//Layer4
    ];
    
    $("#dialog").dialog({
     autoOpen: false,
     modal: true,
     minWidth: 450,
     buttons:{
      "OK": function(){
       // search for checked checkboxes
       var checkList = [];
       $('[class="layer"]:checked').map(function(){
        var layerID = parseInt($(this).attr('id'));
        var txt2 = selected[layerID];
        checkList.push(txt2);
       });
    

    任何人都可以帮我完成以下步骤吗? 谢谢你的时间。

1 个答案:

答案 0 :(得分:1)

我已经实现了您需要的大部分内容here

var alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';

function base64decode(str) {
    var bytes = [];

    for (var i = 0; i < str.length; i++) {
        bytes.push(alphabet.indexOf(str.charAt(i)));
    }

    return bytes;
}

function base64encode(bytes) {
    var str = '';

    for (var i = 0; i < bytes.length; i++) {
        str += alphabet.charAt(bytes[i]);
    }

    return str;
}

$('input').click(
    function () {
        var values = [];
        var result = [];

        $('input:checked').each(
            function (_, el) { values.push(base64decode($(el).data('val'))); }
        );

        var result = [];

        if (values.length > 0) {
            for (var i = 0; i < values[0].length; i++) {
                result.push(
                    values.reduce(
                        function (a, b) {
                            return a | b[i];
                        },
                        0
                    )
                );
            }
        }

        $('#result').text(base64encode(result));
    }
);

另外,我将Base64编码数据保存在每个复选框的数据属性中,而不是单独的数组中。