2012-10-11 14 views
53

próbuje konwertować do liczby następujących:Konwersja ciąg na numer w JavaScript/jQuery

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

Próbowałem zostały również Number() ale nadal jestem coraz NaN podczas sprawdzania wynik. Co ja robię źle?

Oto kompletny kod:

<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

Co to jest "ten" w tym kontekście? –

+2

Co masz działa dobrze, więc mogę tylko założyć, że "to" nie odnosi się do tego, czego oczekujesz. Nie zapominaj także o argumentie podstawowym dla 'parseInt'! –

+1

Czy chcesz uzyskać wartość właściwości data-votevalue lub tekst wewnątrz tagów ? – pythonian29033

Odpowiedz

40

Można użyć parseInt(string, radix) przekonwertować ciąg znaków na liczbę całkowitą jak ten kod poniżej

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

DEMO

5

Brzmi jak this odnosi się do czegoś els e niż myślisz. W jakim kontekście go używasz?

Słowo kluczowe this jest zwykle używane tylko w funkcji wywołania zwrotnego funkcji obsługi zdarzeń, gdy wykonuje się pętlę nad zestawem elementów lub podobnym. W tym kontekście odnosi się do konkretnego elementu DOM i może być używany w taki sam sposób jak Ty.

Jeśli chcesz tylko dostęp do danego przycisku (poza jakimkolwiek zwrotnego lub pętli) i nie ma żadnych innych elementów, które wykorzystują klasę btn-info, można zrobić coś takiego:

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

Można też przypisz elementowi identyfikator i użyj go do wybrania, co jest prawdopodobnie bezpieczniejszym sposobem, jeśli chcesz mieć pewność, że tylko jeden element pasuje do twojego selektora.

84

To brzmi jak this w kodzie nie odnosi się do elementu .btn. Spróbuj odwołać się do niego bezpośrednio za pomocą selektora:

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

Nie zapomnij również o podstawce.

+0

Otrzymuję poprawny ciąg znaków, gdy nie próbuję parsować zmiennej. Więc to odwołuje się do właściwego obiektu. Wysłałem cały kod w moim oryginalnym wpisie. Może mógłbyś rzucić okiem. – user1683645

+0

Problem musi znajdować się w innym miejscu kodu, ponieważ sekcja 'parseInt (votevalue)' działa dobrze: http://jsfiddle.net/fVJRL/ –

27

Chociaż jest to stary post, myślałem, że to prosta funkcja może uczynić kod bardziej czytelnym i utrzymuje z jQuery łańcuchowym code-style:

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

mogą być używane z jQuery:

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

lub z dowolnego String obiektu:

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

można dodanie + przed łańcucha bez użycia parseInt i parseFloat i przelicznika, wystarczy

próbki:

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

alert(typeof(votevalue)); 
6

Należy po prostu użyć "+" przed $(this).Że zamierza przekonwertować ciąg na numer, więc:

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

Oh a ja polecam użyć closest() metodę na wszelki wypadek :)

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

Witaj @expoz - uwaga hit {} w edytorze, aby sformatować sekcję kodu lub użyj 4 spacji przed linią kodu. Dodatkowo możesz użyć pojedynczego cudzysłowu 'wokół kodu do oznaczenia kodu lub poleceń pakietu, np. 'closest()', – micstr

+0

Jestem prawie pewny, że to po prostu wyzysk słabego zarządzania typem JavaScript. To nie wydaje się dobrym pomysłem. – JackHasaKeyboard

1

Twoim przypadku, wystarczy użyć:

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

Istnieje kilka sposobów na konwersję ciągu znaków na liczbę w javascript.

Najlepszym sposobem:

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

można również:

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

lub

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

nie:

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

Używaj parseInt tylko w przypadku specjalnym, na przykład

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

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