70 votes

Convertir une chaîne de caractères en nombre en javascript/jQuery

J'ai essayé de convertir les données suivantes en chiffres :

<button class="btn btn-large btn-info" data-votevalue="1">
    <strong>1</strong>
</button>

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

J'ai également essayé Number() mais je reçois toujours NaN lors de la vérification du résultat. Qu'est-ce qui ne va pas ?

Voici le code complet :

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

Qu'est-ce que this dans ce contexte ?

2 votes

Ce que vous avez fonctionne très bien, je ne peux donc que supposer que this ne correspond pas à ce que vous attendez. N'oubliez pas non plus l'argument radix de la commande parseInt !

1 votes

Voulez-vous la valeur de la propriété data-votevalue ou le texte à l'intérieur des balises <strong></strong> ?

5voto

Christofer Eliasson Points 16563

On dirait que this se réfère à autre chose que ce que vous pensez. Dans quel contexte l'utilisez-vous ?

En this n'est généralement utilisé qu'à l'intérieur d'une fonction de rappel d'un gestionnaire d'événements, lorsque vous parcourez en boucle un ensemble d'éléments, ou similaire. Dans ce contexte, il fait référence à un élément DOM particulier et peut être utilisé comme vous le faites.

Si vous ne voulez accéder qu'à ce bouton particulier (en dehors de tout rappel ou de toute boucle) et que vous n'avez pas d'autres éléments qui utilisent la fonction btn-info vous pourriez faire quelque chose comme :

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

Vous pouvez également attribuer un identifiant à l'élément et l'utiliser pour la sélection, ce qui est probablement plus sûr si vous voulez être sûr qu'un seul élément corresponde à votre sélecteur.

4voto

Gandom Points 63

Vous pouvez ajouter un + avant la chaîne de caractères sans utiliser parseInt et parseFloat et radix, Simplement

échantillon :

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

alert(typeof(votevalue));

4voto

YoJey Thilipan Points 57

Var string = 123 (est une chaîne),

parseInt(le paramètre est une chaîne) ;

var string = '123';

var int= parseInt(string );

console.log(int);  //Output will be 123.

0voto

Ares Points 26

var votevalue = $.map($(this).data('votevalue'), Number);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X