2012-11-10 4 views
2

나는 jQuery를 사용하여 간단한 계산을 수행하려하지만 결과로 NaN을 얻고 있습니다.parseInt html string value

$(document).on('click','.button-group button:not(.done)', function(e){ 
     e.preventDefault(); 
     $(this).addClass('active'); 
     var votevalue = $(this).data('votevalue'); 
     var image_id = $('.mainimage').data('image_id'); 
     var votes = $('.mainimage').data('numvotes'); 
     var totalscore = $('.mainimage').data('totalscore'); 
      $.ajax({ 
       type: 'POST', 
       url: '?a=vote', 
       data: { 
        "votevalue" : votevalue, 
        "image_id" : image_id 
       }, 
       success: function(){ 
        var votes = parseInt(votes); 
        votes++; 
        var average = ((parseInt(totalscore) + parseInt(votevalue))/votes); 
        $('#vote-incremenet').html(votes); 
        $('#display-average').html(average); 
        $('#display-average').show(); 
        $('.button-group button').addClass('done'); 
       } 
     }); // end ajax 
}); // end click 

내가 잘못 뭐하는 거지 : 여기

내 자바 스크립트입니까?

+0

'NaN' 문제와 관련이 없으므로 새로운'votes' 값을'$ ('. mainimage')에 다시 저장하면 안됩니까? data ('numvotes')'? 그렇지 않으면 다른 버튼을 클릭 할 때 이전 numvotes 값을 계산에 사용합니다. – nnnnnn

+0

다음 이미지까지 사용자가 처음 선택한 후에 모든 버튼이 비활성화되지 않습니다 (.addClass ('done')). – user1683645

답변

3

parseInt를 사용할 때는 (parseInt(str), radix)을 전달해야 다른 기본 코드로 자동 변환되지 않습니다.

입력 문자열이 "0x"또는 "0X"로 시작하는 경우 기수는 16 (16 진수)입니다.

입력 문자열이 "0"으로 시작하면 기수는 (8 진수)입니다. 이 기능은 비표준이며 일부 구현 은 고의로 (기수 10을 사용하는 대신) 지원하지 않습니다.

이 경우 이유는 항상 parseInt를 사용할 때 기수를 지정하십시오.

(MDN) 귀하의 경우에는

, 문제가 지속되면 parseInt(varname, 10);


, 당신이 당신이 사용하는 변수 중 하나에 잘못된 값을 전달하는 것입니다 계산.


편집 : 콜백 내부

var votes = parseInt(votes);는 지역 변수 수 있습니다. 그러므로, 그것은 그것이 외부에 주어진 가치를 잃어 버렸습니다. 콜백 내에서 다시 선언하지 마십시오.

+0

또 다른 사실은 콜백 함수에서 계산을 수행 할 때 NaN을 얻고 있다는 것입니다. 그러나 같은 계산을 아약스 이전으로 옮기면 숫자가 표시됩니다. – user1683645

+0

@ user1683645 성공 콜백에서'var votes = parseInt (votes);'를'votes = parseInt (votes);'로 변경하여 게시 한 ** 동일한 ** 코드를 사용해보십시오. –