2012-08-25 2 views
1

내 jquery 스크립트가 9와 10 또는 99와 100 또는 999와 1000을10 또는 99 < 100 또는 999 < 1000 I 잘못된 결과를 얻으면 사실이 아닌 거짓이됩니다. 이 jquery 버그를 어떻게 수정합니까? 감사합니다.두 개의 숫자 비교 9 <10

JQuery와 :

interval = setInterval(function(){ 
       $.post('help/retrivetable.php', { tableimpulse : sessid } , 
        function(watchaget) { 
         if (countcom < watchaget) 
         { 
          countcom = watchaget; 
          $.post('help/retrivetable.php', { newtableimpulse : sessid } , 
           function(getit) { 
            $("#chat").append("<p id="+countmsg+">"+getit+"</p>"); 
            var scrolldown = $('#chat')[0].scrollHeight; 
            $('#chat').animate({scrollTop:scrolldown}, 200); 
          }); 
         } 
       }); 
      }, 50); 

때 countcom = 9 watchaget = 10가,하지만 난 그것을 취급하는 경우가 동일하고 그 안에받지 않습니다 같은 것을 입력해야합니다.

+3

우리가 도울 수 있도록 몇 가지 코드를 보여주십시오. –

+5

소리가 문자열 비교와 같습니다. 'a pimvdb

+0

http://jsfiddle.net/XeH4d/ – nico

답변

11

jQuery는 자바 스크립트입니다. 버그 인 경우 jQuery-Bug가 아니라 Javascript-Bug입니다. (편집 :이 문장에 대한 논의가 주석을 참조하십시오.)

이 솔루션보십시오 :

변수가 문자열로 정의된다 :이 비교가 당신의 결과를 재현

var a = "9"; 
var b = "10"; 

을 :

if (a < b) ... 

두 개의 문자열과 연산자 <을 비교하면가됩니다.첫 번째 피연산자가 두 번째 피연산자보다 어휘 적으로 정렬되는 경우 어순 순서에서 "1"로 시작하는 문자열은 길이에 관계없이 "9"로 시작하는 문자열 앞에 정렬되므로이 결과를 얻습니다.

대신을 시도해보십시오

if (a-b < 0) ... 

용어 a-b 힘 자바 스크립트를 숫자 계산을 처리 할 수 ​​있습니다. 문자열은 숫자로 변환됩니다.

+0

실제로 좋은 대답입니다 :) 감사합니다,이 방법으로 작동했습니다. :) – southpaw93

+0

도움이된다면 답을 upvote하고/또는 받아 들여야한다는 것을 잊지 마십시오. –

+0

예, 통과 할 6 분을 기다리고 있습니다. – southpaw93

5

코드가 숫자가 아닌 문자열을 비교하는 좋은 기회가 있습니다.

Number 기능을 사용하여보십시오 : Number(countcom) < Number(watchaget).

+3

모든 숫자가 정수가 아니기 때문에'parseInt'를 사용하여 문자열을 숫자로 변환하는 습관을 피할 수 있습니다. 더 일반적인 방법은'+ countcom <+ watchaget' 또는'Number (countcom) <'Number (watchaget)'에서와 같이 단항 플러스 연산자를 사용하는 것입니다. – nnnnnn

+0

아, 좋은 지적이야. 답변이 업데이트되었습니다. – cori

1

또한 가치가 주목할 :

[7,8,9,10].sort() // => [10, 7, 8, 9] 

정렬 기능은 기본적으로 문자열에 요소를 캐스팅합니다. 이를 피하려면

[7,8,9,10].sort(function(a, b) { return a - b; }) // => [7, 8, 9, 10] 
1

두 문자열 값을 비교합니다. 귀하의 경우 parseInt(value, 10)

사용하여 int로 문자열 값을 구문 분석하려고

if (parseInt(countcom,10) < parseInt(watchaget,10)) 
    { 
     .... 
    } 

는 도움이되기를 바랍니다.