2016-04-18 6 views
0

Ich habe einige Kontrollkästchen mit bootstrapSwitch gestylt. Ich schrieb ein Skript, das den Wert eines Kontrollkästchens zu einem Array hinzufügen muss, wenn bootstrapSwitch state wahr ist.Javascript array.push() nicht hinzufügen, aber ersetzen Sie es

Dies ist mein 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) 
}); 

Aber überraschend push Methode den Wert ersetzen und meine s Array immer einen Index haben.

Bitte lassen Sie mich wissen, warum ist das so?

Vielen Dank im Voraus

+0

Definiere Array aus dem Handler..Oder wird initialisiert auf '[] (empty-array)' jedes Mal, wenn Handler aufgerufen wird ... – Rayon

+2

Das liegt daran, dass du 's' bei jedem Klick neu erstellst. Versuchen Sie, die Deklaration von 's' außerhalb des Ereignisrückrufs zu bewegen – haim770

Antwort

2
var s = new Array(); 

diese definieren die Handler-Funktion aus.

Es ist immer 1, weil Sie es jedes Mal neu erstellen.

+1

Schande über mich ...: -) ... Ich werde Ihre Antwort akzeptieren, sobald die Seite mich das tun lassen – Kiyarash

+0

Es passiert manchmal :) Danke! –

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

so versuchen, diese

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) 
}); 
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) 
    }); 

einfach das Array außerhalb erklären. Benutzer [] stattdessen auf neues Array(), da es schneller ist.