2017-02-07 3 views
0

검색 결과 페이지의 일부로 사용하고있는 javascript에 문제가 있습니다. 누군가 도움을 줄 수 있기를 바랍니다. 나는 'currentAmount'변수가 'total'변수보다 적음을 확인하는 함수를 가지고있다. currentAmount가 total보다 작 으면 무언가를 수행하고 그렇지 않으면 아무것도하지 않습니다. currentAmount 항상 처음에 대부분의 경우 12됩니다 위에서자바 스크립트 관련 문제 <조건이 확실히 true 일 때 false를 반환하는 연산자

var currentAmount = document.getElementById('currentAmountHidField').value; 
    var total = '@Html.Raw(Json.Encode(Model.ResultCount))'; 
    var tempScrollTop = $(window).scrollTop(); 

    function loadMore() { 
     alert("current amount" + currentAmount); 
     alert("total" + total); 
     var listView = $("#propertyList").data("kendoListView"); 

     if (currentAmount < total) { 
      alert("function is being run"); 
      currentAmount = +currentAmount + 12; 
      document.getElementById('currentAmountHidField').value = currentAmount; 
      if (currentAmount >= total) { 
       $('#loadMoreButton').hide(); 
      } 
     } 
     else { 
      alert("function is not being run"); 
     } 

     listView.dataSource.pageSize(currentAmount); 
     listView.refresh(); 
     tempScrollTop = $(window).scrollTop(); 
    } 

은이 완전히 잘 작동하지만, 전체 = 108, 자바 스크립트가의 다른 절을 처리하고있는 검색의 인스턴스에 대한 기능. 즉 "기능이 실행되고 있지 않음"이라는 경고가 표시됩니다. 나는 이유를 알 수 없다.

테스트를 위해 경고가 있습니다. 그러면 "currentAmount12"와 "total108"이 차례로 표시되고 "function not running"이 표시됩니다. 그건 말이 안되니? 심지어는 숫자로 처리되는 것을 확인하기 위해 2 개의 숫자 (예 : 108에서 12를 뺍니다)로 다른 것을 즉시 시도했습니다. 그리고 제가 말했듯이, 이것은 테스트 할 수 있었던 모든 다른 숫자의 조합에 대해 작동합니다.

하나의 검색 기준만으로도 12를 읽는 것은 108보다 많습니다. 흥미롭게도 loadMore 함수의 첫 번째 행에서 값을 12로 하드 코어 할 때 그에 따라 실행되지만 분명히 좋지는 않습니다 .

아무런 도움을받지 못 하셨다면 큰 도움이 될 것입니다. 왜 자바 스크립트는 12가 108보다 크다고 생각하니?

감사

+0

* 1 단계 * "조건이 확실히에 해당하는 경우 자바 스크립트 <연산자는 false를 반환과 함께 문제"조건이 믿음의 이동하자 사실이다. 그렇지 않습니다. 만약 그렇다면 연산자는'거짓 '이 아니라'참 '을 반환 할 것입니다. ['선택 '은 깨지지 않았습니다.] (https://pragprog.com/the-pragmatic-programmer/extracts/tips). –

+0

테스트 직전에 변수와 유형을 기록하십시오 :'console.log (typeof total, total);'.결과가 왜 그렇게 생각하는지 이해할 수 없습니다 (문자열은 숫자가 아님). –

+0

문자열이 아닌 숫자를 비교하는지 확인하십시오. 'var total = Number ('@Html.raw ...'); ' –

답변

2

currentAmounttotal은 모두 문자열, 그래서 그들은하지 숫자, 사 전적으로 비교되는 것입니다. '12''108'보다 큽니다.

parseInt()을 사용하여 입력 값을 숫자로 변환하고 따옴표를 total으로두면 숫자가됩니다.

currentAmount = +currentAmount + 12; 

+ 이후 currentAmount 전에 숫자로 변환하는 (그래서 당신은 연결하는 것은 아니고 또한 얻을)입니다 : 당신이 쓴

var currentAmount = parseInt(document.getElementById('currentAmountHidField').value, 10); 
var total = @Html.Raw(Json.Encode(Model.ResultCount)); 

당신은 분명이이 문제를 알고 있었다. 나는 그것이 또한 비교에 영향을 준다는 것을 몰랐습니다.

+0

당신은 바르 마의 자리에 있습니다. 나는 단지 문제가 없었으므로 숫자로 처리되고 있다고 가정했는데, 12 번이 109 번에 이르기까지는 아무런 문제가 없었습니다. 지금은 100 번에서 119 번까지 고장 났지만 테스트에서는 결코 나오지 않습니다. 나쁜 테스트, 도움에 대한 환호! – Johnathan

1

양식 컨트롤에서 가져온 모든 값은 문자열이며 따라서 currentAmount에 포함 된 값입니다. 그런 다음 갑자기 예를 들어 "12"< "5"입니다. "1"이 "5"보다 작기 때문입니다.

해결책 : parseInt() 또는 parseFloat()을 사용하면 실제 숫자를 변수에 포함시킬 수 있으며 문자열은 유사하지만 숫자는 아닙니다.

0

친절하게 원하는 유형에 문자열 변수를 구문 분석 :에서는 parseFloat /에서는 parseInt

function loadMore() { 

currentAmount = parseInt(currentAmount); 
total = parseInt(currentAmount); 
... 


}