2015-08-14 1 views
2

В моем приложении два текстовых поля имеютJavaScript casting - почему сравнение «5»> «300» возвращает true?

<input type="text" ng-model="priceSlider.min" /><br/> 
<input type="text" ng-model="priceSlider.max" /><br/> 

Мой angularjs контроллер:

app.controller('MainCtrl', function($scope) { 
    $scope.priceSlider  = {}; 
    $scope.priceSlider.min = 100; 
    $scope.priceSlider.max = 400; 
    $scope.priceSlider.ceil = 500; 
    $scope.priceSlider.floor = 0; 

    $scope.$watch('priceSlider.min',function(newVal,oldVal) { 
     if(isNaN($scope.priceSlider.min)) { 
      console.log('naan'); 
      $scope.priceSlider.min=oldVal; 
     } 

     if($scope.priceSlider.min>$scope.priceSlider.max) { 
      console.log($scope.priceSlider.min>$scope.priceSlider.max); 
      console.log($scope.priceSlider.min+":"+$scope.priceSlider.max); 

      var t = $scope.priceSlider.min; 
      $scope.priceSlider.min = $scope.priceSlider.max; 
      $scope.priceSlider.max = t; 
     } 
    } 
}); 

Теперь большую часть времени, если условие в $ часы работает нормально, но в некоторых условиях он не например: Если я пишу 200 и 300 в двух текстовых полях, и я выбираю первое текстовое поле и пытаюсь изменить (на 5), значения, которые идут, если это 5 и 300, но условие 5> 300, если показано true ... I я не могу найти, почему это происходит. Я делаю что-нибудь глупое

Пожалуйста, проверьте вещь в плунжере.

http://plnkr.co/edit/4Wga7zCIX2udPZa6b0gI

+1

возможно дубликат [Javascript строки/целочисленные сравнения] (http://stackoverflow.com/questions/5630123/javascript-string-integer-comparisons) – Bergi

+0

@mohamedrias Ах да, вы правы – Jojo

ответ

3

Причина, почему вы получаете верно, когда вы сравните 5 и 300 может быть это делает сравнение строк.

"5" > "300" 
>> true 

Итак, преобразуйте значение в целое, а затем сравните. использовать parseInt(val, 10) или Number(val)

Смежные вопросы