Javascript array.push()不添加但替换它

时间:2016-04-18 10:04:33

标签: javascript arrays bootstrap-switch

我有一些用bootstrapSwitch设置样式的复选框。 我编写了一个脚本,当bootstrapSwitch state为真时,必须在数组中添加checkbox的值。

这是我的代码:

$('input[name^=skill]').on('switchChange.bootstrapSwitch', function (event, state) {

    //alert(state);
    //var s = [];

    var s = new Array();

    if( state === true )
    {
        //var value = $(this).val();
        s.push( $(this).val() );

        console.log(s);//(value)

    }

        console.log(s);//(value)
});

但令人惊讶的是push方法替换了值,而我的s数组总是有一个索引。

请你告诉我为什么会这样?

提前致谢

3 个答案:

答案 0 :(得分:3)

var s = new Array();

从处理程序函数中定义它。

它始终是1,因为您每次都会重新创建它。

答案 1 :(得分:2)

var s = new Array();// this line should be out side of function. so it will not be new object everytime

所以试试这个

var s = new Array();// this line should be here. so it will not be new object everytime

$('input[name^=skill]').on('switchChange.bootstrapSwitch', function (event, state) {

    //alert(state);
    //var s = [];

    var s = new Array();

    if( state === true )
    {
        //var value = $(this).val();
        s.push( $(this).val() );

        console.log(s);//(value)

    }

        console.log(s);//(value)
});

答案 2 :(得分:1)

var s = [];

$('input[name^=skill]').on('switchChange.bootstrapSwitch', function (event, state) {

        //alert(state);
        //var s = [];



        if( state === true )
        {
            //var value = $(this).val();
            s.push( $(this).val() );

            console.log(s);//(value)

        }

            console.log(s);//(value)
    });

只需在外面声明数组。用户[]代替新的Array(),因为它更快。