Ответ 1
Похоже, что this
в вашем коде не относится к вашему элементу .btn
. Попробуйте указать его явно с помощью селектора:
var votevalue = parseInt($(".btn").data('votevalue'), 10);
Кроме того, не забудьте о основании.
Пробовал преобразовать следующее в число:
<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
Похоже, что this
в вашем коде не относится к вашему элементу .btn
. Попробуйте указать его явно с помощью селектора:
var votevalue = parseInt($(".btn").data('votevalue'), 10);
Кроме того, не забудьте о основании.
Вы можете использовать parseInt (string, radix) для преобразования строкового значения в целое число, как этот код ниже
var votevalue = parseInt($('button').data('votevalue'));
Хотя это старый пост, я подумал, что простая функция может сделать код более понятным и содержать код 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)`
Вам следует просто использовать "+" перед $(this)
. Это приведет к преобразованию строки в число, поэтому:
var votevalue = +$(this).data('votevalue');
О, и я рекомендую использовать метод closest()
на всякий случай:)
var votevalue = +$(this).closest('.btn-group').data('votevalue');
Похоже, что this
ссылается на что-то другое, чем вы думаете. В каком контексте вы его используете?
Ключевое слово this
обычно используется только в функции обратного вызова обработчика событий, когда вы выполняете цикл по набору элементов или тому подобное. В этом контексте он относится к определенному DOM-элементу и может использоваться так, как вы.
Если вы хотите получить доступ к этой конкретной кнопке (вне любого обратного вызова или цикла) и не иметь других элементов, которые используют класс btn-info
, вы можете сделать что-то вроде:
parseInt($(".btn-info").data('votevalue'), 10);
Вы также можете присвоить элементу идентификатор и использовать его для выбора, что, вероятно, более безопасно, если вы хотите быть уверенным, что только один элемент соответствует вашему селектору.
Вы можете добавить +
перед строкой без использования parseInt и parseFloat и radix, просто
Пример:
var votevalue = +$('button').data('votevalue');
alert(typeof(votevalue));
В вашем случае просто используйте:
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
var voicevalue = $.map($ (this).data('voicevalue'), Number);
var string = 123 (является строкой),
parseInt (параметр является строкой);
var string = '123';
var int= parseInt(string );
console.log(int); //Output will be 123.