2012-02-09 20 views
5

Sto aggiungendo valori da elenchi di selezione (o sottrazione) e non riesco a farlo sembrare non concatenare la stringa.jQuery aggiunta di stringhe e non concatenazione

Il mio elenco di selezione è:

<li class="extraHeight"> 
    <asp:Image runat="server" CssClass="iconImageMove" ID="Image13" ImageUrl="~/images/icons/ABabyChg_Off.png" /> 
    <div class="flipWidth"> 
     <select name="access" class="change" id="ABabyChg_Off" runat="server"> 
      <option value="16777216">Off</option> 
      <option value="16777216">On</option> 
     </select> 
    </div> <br /> <p class="noWrap">Accessible baby changing facilities</p> 
</li> 

<li class="extraHeight"> 
    <asp:Image runat="server" CssClass="iconImageMove" ID="Image14" ImageUrl="~/images/icons/carpark_off.png" /> 
    <div class="flipWidth"> 
     <select name="access" class="change" id="carpark_off" runat="server"> 
      <option value="256">Off</option> 
      <option value="256">On</option> 
     </select> 
    </div> <br /> <p class="noWrap">Accessible Car parking facilities</p> 
</li> 

E il mio javascript è:

<script>  

     $("select").change(function() { 

      var currentAccess = "0"; 
      var currentText = $(":selected", this).text(); 
      var value = $(this).val() 
      alert(currentAccess); 
      if(currentText == "Off") 

        { 
         currentAccess -= value; 
        } 
      if(value != "0") {   
      if(currentText == "On") 
        { 
         currentAccess += value; 
        } 
      } 

       $.cookie("accessReqs", currentAccess, { expires: 24 }); 
       alert(currentAccess); 

      }) 

    </script> 

Fondamentalmente sto cercando di avere currentAccess avere il valore corrente come un intero e aggiungere e sottrarre così com'è necessario.

Tom

risposta

3

Utilizzare numeri interi anziché stringhe.

  • Inizializzazione currentAccess a zero.
  • Il -= operatore lascia poco spazio per ambiguità, ma l'operatore
    += può significare sia "concatenare una stringa" o "aggiungere un numero".
  • Per rendere più evidente, convert the variable to a number, ad esempio utilizzando *1 (1) volte

codice aggiornato:

$("select").change(function() { 

    var currentAccess = 0; // Instead of "0" 
    var currentText = $(":selected", this).text(); 
    var value = $(this).val() * 1; 
    alert(currentAccess); 
    if (currentText == "Off") 
    { 
     currentAccess -= value; 
    } 
    if (value != 0) { 
     if (currentText == "On") { 
      currentAccess += value; 
     } 
    } 

    $.cookie("accessReqs", currentAccess, { 
     expires: 24 
    }); 
    alert(currentAccess);  
}); 
+1

Alcuni considerano '* 1' (al posto di Number/parseInt) cattivo stile. – georg

+0

@ thg435 ** [citazione necessaria] **. 'Number' è una funzione, e molto ** [più lento] (http://jsperf.com/number-vs-parseint-vs-plus/23) ** di un semplice' * 1'. –

+0

Grazie per questo. Quando aggiungo il valore al cookie, quindi leggo il cookie di nuovo lo concatena di nuovo e lo perdono come valore. Ho provato parseInt ma non sembra fare molto – TMB87

5

Benvenuto in javascript!

alert(1+1); -> 2 
alert("1"+"1"); -> 11 
alert(Number("1")+Number("1")); -> 2