6

I have some checkboxes styled with bootstrapSwitch. I wrote a script that have to add value of checkbox to an array when bootstrapSwitch state is true.

This is my code :

$('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)
});

But surprisingly push method replace the value and my s array always have one index.

Would you please let me know why is that?

Thanks in Advance

Kiyarash
  • 2,437
  • 7
  • 32
  • 61
  • Define array out of the handler..Or it will be initialized to `[](empty-array)` every time handler is invoked... – Rayon Apr 18 '16 at 10:06
  • 2
    That's because you're re-creating `s` upon each click. Try to move the declaration of `s` outside of the event callback – haim770 Apr 18 '16 at 10:06

3 Answers3

6
var s = new Array();

Define this out of the handler function.

It's always 1 because you're recreating it everytime.

Alok Patel
  • 7,842
  • 5
  • 31
  • 47
2
var s = new Array();// this line should be out side of function. so it will not be new object everytime

so try this

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)
});
sangram parmar
  • 8,462
  • 2
  • 23
  • 47
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)
    });

Just declare the array outside. User [] instead on new Array() as it is faster.

Swaprks
  • 1,553
  • 11
  • 16