2012-10-11 14 views
53

estado tratando de convertir el número siguiente para:conversión de cadena a número en Javascript/jQuery

<button class="btn btn-large btn-info" data-votevalue="1"> 
    <strong>1</strong> 
</button> 
var votevalue = parseInt($(this).data('votevalue')); 

También he intentado Number() pero todavía estoy consiguiendo NaN al comprobar el resultado. ¿Qué estoy haciendo mal?

Aquí está el código completo:

<div class="span7" id="button-group"> 
    <div class="btn-group"> 
     <button class="btn btn-large btn-info" data-votevalue="1"><strong>1</strong></button> 
     <button class="btn btn-large btn-info" data-votevalue="2"><strong>2</strong></button> 
     <button class="btn btn-large btn-info" data-votevalue="3"><strong>3</strong></button> 
     <button class="btn btn-large btn-info" data-votevalue="4"><strong>4</strong></button> 
     <button class="btn btn-large btn-info" data-votevalue="5"><strong>5</strong></button> 
     <button class="btn btn-large btn-info" data-votevalue="6"><strong>6</strong></button> 
     <button class="btn btn-large btn-info" data-votevalue="7"><strong>7</strong></button> 
     <button class="btn btn-large btn-info" data-votevalue="8"><strong>8</strong></button> 
     <button class="btn btn-large btn-info" data-votevalue="9"><strong>9</strong></button> 
     <button class="btn btn-large btn-info" data-votevalue="10"><strong>10</strong></button> 
    </div> 
</div> 
$('#button-group button').each(function() { 
    $(this).click(function() { 
     $(this).addClass('active'); 
     var votevalue = parseInt($(this).data('votevalue')); 
     var filename = $('.mainimage').data('filename'); 
     var votes = parseInt($('.mainimage').data('numvotes')); 
     var totalscore = parseInt($('.mainimage').data('totalscore')); 
     $.ajax({ 
      type: 'POST', 
      url: 'index.php/?category=vote', 
      data: { 
       "votevalue": votevalue, 
       "filename": filename 
      }, 
      success: function() { 
       votes++; 
       alert(votes); 
       var average = ((totalscore + votevalue)/votes); 
       $('#vote-incremenet').html(votes); 
       $('#display-average').html(average); 
       $('#display-average').show(); 
       $('#button-group button').each(function(){ 
        $(this).unbind('click'); 
       }); 
      } 
     }); // end ajax 
    }); // end click 
}); // end each 
+0

¿A qué se refiere 'this' en este contexto? –

+2

Lo que tienes funcionará bien, así que solo puedo suponer que 'this' no se refiere a lo que esperas. ¡Además, no olvides el argumento radix para 'parseInt'! –

+1

¿desea el valor de la propiedad data-votevalue o el texto dentro de las etiquetas ? – pythonian29033

Respuesta

40

Puede utilizar parseInt(string, radix) para convertir valor de cadena a un entero como el código de abajo

var votevalue = parseInt($('button').data('votevalue')); 
​ 

DEMO

5

Suena como this se refiere a algo els e de lo que piensas ¿En qué contexto lo estás usando?

La palabra clave this generalmente solo se usa dentro de una función de devolución de llamada de un controlador de eventos, cuando se repite un conjunto de elementos, o similar. En ese contexto, se refiere a un elemento DOM particular, y se puede usar de la manera en que lo hace.

Si sólo desea tener acceso a ese botón en particular (fuera de cualquier devolución de llamada o bucle) y no tienen ningún otro elemento que utilizan la clase btn-info, usted podría hacer algo como:

parseInt($(".btn-info").data('votevalue'), 10); 

También podría asigne al elemento una ID y utilícelo para seleccionar on, que probablemente sea una forma más segura, si desea asegurarse de que solo un elemento coincida con su selector.

84

Parece que this en su código no se refiere a su elemento .btn. Intente hacer referencia explícitamente con un selector:

var votevalue = parseInt($(".btn").data('votevalue'), 10); 

Además, no olvide la raíz.

+0

Obtengo la cadena correcta cuando no intento analizar la variable. Por lo tanto, esta referencia al objeto correcto. Publiqué el código completo en mi publicación original. Tal vez podrías echarle un vistazo. – user1683645

+0

El problema debe estar en otro lugar en su código, porque la sección 'parseInt (valor de voto)' funciona bien: http://jsfiddle.net/fVJRL/ –

27

Aunque se trata de un antiguo puesto, pensé que una función simple puede hacer que el código sea más legible y mantiene con jQuery encadenamiento de código de estilo:

String.prototype.toNum = function(){ 
    return parseInt(this, 10); 
} 

se puede utilizar con jQuery:

var padding_top = $('#some_div').css('padding-top'); //string: "10px" 
var padding_top = $('#some_div').css('padding-top').toNum(); //number: 10` 

o con cualquier objeto String:

"123".toNum(); //123 (number)` 
4

puede añadir un + antes de la cadena sin usar parseInt y parseFloat y radix, simplemente

muestra:

var votevalue = +$('button').data('votevalue'); 

alert(typeof(votevalue)); 
6

sólo debe usar "+" antes $(this).Eso va a convertir la cadena en serie, por lo que:

var votevalue = +$(this).data('votevalue'); 

Ah, y me recomiendan usar closest() método por si acaso :)

var votevalue = +$(this).closest('.btn-group').data('votevalue'); 
+0

Bienvenido @expoz - note hit {} en el editor para formatear una sección de código , o use 4 espacios en frente de la línea de código. Además, puede usar comillas simples 'alrededor del código para marcar el código o los comandos del paquete, p. 'closest()', – micstr

+0

Estoy bastante seguro de que es solo una explotación de la gestión de tipo deficiente de JavaScript. Eso no parece una buena idea. – JackHasaKeyboard

1

Para su caso, sólo tiene que utilizar:

var votevalue = +$(this).data('votevalue'); 

Hay algunas formas de convertir cadena a número en javascript.

La mejor manera:

var str = "1"; 
var num = +str; //simple enough and work with both int and float 

También puede:

var str = "1"; 
var num = Number(str); //without new. work with both int and float 

o

var str = "1"; 
var num = parseInt(str,10); //for integer number 
var num = parseFloat(str); //for float number 

NO HACER:

var str = "1"; 
var num = new Number(str); //num will be an object. typeof num == 'object' 

Use parseInt solo para casos especiales, por ejemplo

var str = "ff"; 
var num = parseInt(str,16); //255 

var str = "0xff"; 
var num = parseInt(str); //255