72

以下を数値に変換しようとしています:

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

私も試しましたが、結果を確認しNumber()てもまだ取得しています。NaN私は何が間違っているのですか?

完全なコードは次のとおりです。

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

9 に答える 9

95

thisあなたのコードではあなたの.btn要素を参照していないようです。セレクターで明示的に参照してみてください。

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

また、基数を忘れないでください。

于 2012-10-11T12:35:04.780 に答える
54

You can use parseInt(string, radix) to convert string value to integer like this code below

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

DEMO

于 2012-10-11T12:32:35.087 に答える
32

これは古い投稿ですが、単純な関数を使用するとコードが読みやすくなり、jQuery チェーン コード スタイルを維持できると思いました。

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

jQueryで使用できます:

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

または任意のStringオブジェクトで:

"123".toNum(); //123 (number)`
于 2014-02-22T22:49:10.890 に答える
11

あなたの場合、次を使用してください:

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

JavaScript で文字列を数値に変換する方法はいくつかあります。

最良の方法:

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

次のこともできます。

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

また

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

してはいけないこと:

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

特殊な場合にのみ parseInt を使用します。たとえば、

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

var str = "0xff";
var num = parseInt(str); //255
于 2017-05-20T10:04:55.260 に答える
8

の前に「+」を使用する必要があります$(this)。これは文字列を数値に変換するため、次のようになります。

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

ああ、念のためclosest()メソッドを使用することをお勧めします:)

var votevalue = +$(this).closest('.btn-group').data('votevalue');
于 2016-01-29T14:49:07.670 に答える
5

It sounds like this is referring to something else than you think. In what context are you using it?

The this keyword is usually only used within a callback function of an event-handler, when you loop over a set of elements, or similar. In that context it refers to a particular DOM-element, and can be used the way you do.

If you only want to access that particular button (outside any callback or loop) and don't have any other elements that use the btn-info class, you could do something like:

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

You could also assign the element an ID, and use that to select on, which is probably a safer way, if you want to be sure that only one element match your selector.

于 2012-10-11T12:33:16.203 に答える
4

+parseInt と parseFloat と基数を使用せずに、文字列の前にa を追加できます。

サンプル:

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

alert(typeof(votevalue));
于 2015-09-18T14:51:40.683 に答える