Подтвердить что ты не робот

Преобразование строки в число в javascript/jQuery

Пробовал преобразовать следующее в число:

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

Ответ 1

Похоже, что this в вашем коде не относится к вашему элементу .btn. Попробуйте указать его явно с помощью селектора:

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

Кроме того, не забудьте о основании.

Ответ 2

Вы можете использовать parseInt (string, radix) для преобразования строкового значения в целое число, как этот код ниже

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

DEMO

Ответ 3

Хотя это старый пост, я подумал, что простая функция может сделать код более понятным и содержать код 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)`

Ответ 4

Вам следует просто использовать "+" перед $(this). Это приведет к преобразованию строки в число, поэтому:

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

О, и я рекомендую использовать метод closest() на всякий случай:)

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

Ответ 5

Похоже, что this ссылается на что-то другое, чем вы думаете. В каком контексте вы его используете?

Ключевое слово this обычно используется только в функции обратного вызова обработчика событий, когда вы выполняете цикл по набору элементов или тому подобное. В этом контексте он относится к определенному DOM-элементу и может использоваться так, как вы.

Если вы хотите получить доступ к этой конкретной кнопке (вне любого обратного вызова или цикла) и не иметь других элементов, которые используют класс btn-info, вы можете сделать что-то вроде:

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

Вы также можете присвоить элементу идентификатор и использовать его для выбора, что, вероятно, более безопасно, если вы хотите быть уверенным, что только один элемент соответствует вашему селектору.

Ответ 6

Вы можете добавить + перед строкой без использования parseInt и parseFloat и radix, просто

Пример:

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

alert(typeof(votevalue));

Ответ 7

В вашем случае просто используйте:

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

DO NOT:

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

Ответ 8

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

Ответ 9

var string = 123 (является строкой),

parseInt (параметр является строкой);

var string = '123';

var int= parseInt(string );

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