2012-10-11 17 views
53

一直試圖轉換到以下號碼:轉換串號在JavaScript/jQuery的

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

我也試過​​但檢查結果時,我仍然得到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 
+0

這個'this'在這種情況下指的是什麼? –

+2

你有什麼會正常工作,所以我只能假定'this'並不是指你所期望的。另外,不要忘記'parseInt'的基數參數! –

+1

你想要的數據votevalue屬性的值或標籤內的文本? – pythonian29033

回答

40

您可以使用​​字符串值轉換爲整數像下面

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

DEMO

5

這段代碼這聽起來像this指的是某些els比你想象的要多。你在什麼情況下使用它?

this關鍵字通常只用於事件處理程序的回調函數中,當您遍歷一組元素或類似元素時。在這種情況下,它指的是一個特定的DOM元素,並且可以像你一樣使用。

如果你只是想訪問特定的按鈕(任何回調或循環外),並沒有使用該btn-info類中的任何其他元素,你可以這樣做:

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

你也可以如果要確保只有一個元素與您的選擇器相匹配,則爲該元素分配一個ID,並使用該ID選擇,這可能是更安全的方法。

84

聽起來像你的代碼中的this不是指你的.btn元素。嘗試使用選擇器明確引用它:

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

另外,不要忘記基數。

+0

我得到正確的字符串時,我不嘗試解析變量。所以這個引用正確的對象。我在我原來的帖子中發佈了完整的代碼。也許你可以看看。 – user1683645

+0

問題必須在你的代碼在其他地方,然後,因爲'parseInt函數(votevalue)'部分工作正常:http://jsfiddle.net/fVJRL/ –

27

儘管這是一個老帖子,我認爲,一個簡單的功能,可以使代碼更易讀,並與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

您可以加入+不使用parseInt函數和parseFloat和基數的字符串之前只需

樣本:

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

alert(typeof(votevalue)); 
6

你應該只是 「+」 $(this)之前使用。那將字符串轉換爲數字,所以:

​​

哦,我建議使用closest()方法,以防萬一:)

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

歡迎@expoz - 請注意,在編輯器中打{}格式化代碼段,或者在代碼行前面使用4個空格。另外,您可以使用單引號'around代碼來標記代碼或包命令,例如'最接近()', – micstr

+0

我敢肯定,這只是JavaScript的差式管理的剝削。這似乎不是一個好主意。 – JackHasaKeyboard

1

對於你的情況,只需使用:

​​

有字符串轉換成數在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