2012-02-09 27 views
5

Estoy agregando valores de listas de selección (o restando) y parece que no puedo hacer que no concatene la cadena.jQuery agregar cadenas y no concatenar

Mi lista de selección es:

<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> 

Y mi Javascript es:

<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> 

Básicamente estoy tratando de tener currentAccess tener el valor actual como un entero y sumar y restar como es necesario.

Tom

Respuesta

3

Usa enteros en lugar de cadenas.

  • Inicializa currentAccess en cero.
  • El operador -= deja poco lugar para la ambigüedad, pero el operador
    += puede significar "concatenar una cadena" o "agregar un número".
  • para que sea más evidente, convert the variable to a number, por ejemplo, mediante el uso de *1 (tiempos 1)

código Actualizado:

$("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

Algunos consideran '* 1' (en lugar de Número/parseInt) mal estilo. – georg

+0

@ thg435 ** [citación necesitada] **. 'Number' es una función, y mucho ** [más lento] (http://jsperf.com/number-vs-parseint-vs-plus/23) ** que un simple' * 1'. –

+0

Gracias por esto. Cuando agrego el valor a la cookie, luego leo la cookie de nuevo, la concatena nuevamente y la pierdo como valor. He intentado analizar pero no parece hacer mucho – TMB87

5

Bienvenido a JavaScript!

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