代码之家  ›  专栏  ›  技术社区  ›  user2601414

jQuery组合了2个绑定函数(TypeError:a未定义)

  •  0
  • user2601414  · 技术社区  · 11 年前

    请给我一个建议。

    我试图通过组合两个相似的函数的公共部分来编写一个函数。
    从这两个函数中,我希望得到“selected1”&“selected2”,并在下一个函数calc中使用这些值。

    var selected;
    var selected1;
    var selected2;
    
    $( '.type1' ).bind('change', function () {
        var values = [];
        $( 'input.type1:checkbox:checked' ).each(function ( _, el ) {
            values.push( base64decode( $( el ).data( 'val' ) ) );
            if ( values.length > 1 ) {
                values[0] = $.map(values[0], function (val, i) {
                    return values[0][i] | values[1][i];
                });
                values.splice(1,1);
            }
        });
        selected1 = result;
        calc();
    });
    
    $( '.type2' ).bind('change', function () {
        var values = [];
        $( 'input.type2:checkbox:checked' ).each(function ( _, el ) {
            values.push( base64decode( $( el ).data( 'val' ) ) );
            if ( values.length > 1 ) {
                values[0] = $.map(values[0], function (val, i) {
                    return values[0][i] | values[1][i];
                });
                values.splice(1,1);
            }
        });
        selected2 = result;
        calc();
    });
    
    function calc () {
        var selected3 = $.map(selected1, function (val, i) {
            return selected1[i] & selected2[i];
        });
        selected = base64encode( selected3 );
        overlays();
    };
    

    当我如上所述写时,都选择了1&2被定义为全局变量,因此函数calc起作用。

    然而,它对我的重写代码不起作用。firebug显示“TypeError:a未定义”。 这是我的代码:

    function tab (checkedTab, selected) {
        var values = [];
        checkedTab.each(function ( _, el ) {
            values.push( base64decode ($( el ).data( 'val' ) ) );
            if ( values.length > 1 ) {
                values[0] = $.map(values[0], function (val, i) {
                    return values[0][i] | values[1][i];
                });
                values.splice(1,1);
            }
        });
        selected = values[0];
    };
    $( '.type1' ).bind('change', function () {
        tab ($( 'input.type1:checkbox:checked' ), 'selected1');
        calc();
    });
    $( '.type2' ).bind('change', function () {
        tab ($( 'input.type2:checkbox:checked' ), 'selected2');
        calc();
    });
    

    有人能告诉我为什么我的代码不工作吗?

    1 回复  |  直到 11 年前
        1
  •  0
  •   user2601414    11 年前

    彼得,非常感谢你的评论。
    在调试变量后,它终于工作了!
    这可能不是最好的方法,但我将发布我的重写代码作为参考。

    var values;
    
    function tab (checkedTab) {
        values = [];
            checkedTab.each(function ( _, el ) {
            values.push( base64decode ($( el ).data( 'val' ) ) );
            if ( values.length > 1 ) {
                values[0] = $.map(values[0], function (val, i) {
                    return values[0][i] | values[1][i];
                });
                values.splice(1,1);
            }
        });
        return values[0];
    };
    $( '.type1' ).bind('change', function () {
        selected1 = tab ($( 'input.type1:checkbox:checked' ));
        calc();
    });
    $( '.type2' ).bind('change', function () {
        selected2 = tab ($( 'input.type2:checkbox:checked' ));
        calc();
    });