Почему не выполняется условие if else в javascript?

175
22 марта 2018, 10:32

Добрый день. Я только разбираюсь с JavaScript, пробую написать простой скрип с условиями. Но по факту условия считываются неправильно - при любых входных данных скрип выдает результат последнего условия (('1 (Scalene)'). Помогите разобраться где у меня ошибка! Спасибо!

function displayResult() { 
  var a = document.getElementById('a').value; 
  var b = document.getElementById('b').value; 
  var c = document.getElementById('c').value; 
 
  document.getElementById('result').innerHTML = calculateResult(a, b, c); 
} 
 
 
function calculateResult() { 
  if (a == b && b == c) { 
    return ('3 (Equilateral)') 
  } else if (a >= (b + c) || c >= (b + a) || b >= (a + c)) { 
    return ('4 (Error. Not a triangle)') 
  } else if ((a == b && b != c) || (a != b && c == a) || (c == b && c != a)) { 
    return ('2 (Isosceles)') 
  } else if (a != b && b != c && c != a) { 
    return ('1 (Scalene)') 
  } 
}
<input type="text" name="a" id="a" placeholder="Side a"> 
<input type="text" name="b" id="b" placeholder="Side b"> 
<input type="text" name="c" id="c" placeholder="Side c"> 
<input type="button" id="calculate" onclick="displayResult()" value="Triangle type"> 
<br> 
<p id="result"></p>

Answer 1

Не работает, потому что calculateResult() определена без использования переменных и заданные a, b, c в ней не используются, а используются какие-то другие переменные с неизвестными значениями.

Исправьте строчку function calculateResult() на function calculateResult(a, b, c):

function displayResult() { 
  var a = document.getElementById('a').value; 
  var b = document.getElementById('b').value; 
  var c = document.getElementById('c').value; 
 
  document.getElementById('result').innerHTML = calculateResult(Number(a), Number(b), Number(c)); 
} 
 
 
function calculateResult(a, b, c) { 
  if (a == b && b == c) { 
    return ('3 (Equilateral)') 
  } else if (a >= (b + c) || c >= (b + a) || b >= (a + c)) { 
    return ('4 (Error. Not a triangle)') 
  } else if ((a == b && b != c) || (a != b && c == a) || (c == b && c != a)) { 
    return ('2 (Isosceles)') 
  } else if (a != b && b != c && c != a) { 
    return ('1 (Scalene)') 
  } 
}
<input type="text" name="a" id="a" placeholder="Side a"> 
<input type="text" name="b" id="b" placeholder="Side b"> 
<input type="text" name="c" id="c" placeholder="Side c"> 
<input type="button" id="calculate" onclick="displayResult()" value="Triangle type"> 
<br> 
<p id="result"></p>

Как справедливо заметили в комментариях, чтобы сравнение работало правильно, нужно значения переменных перевести в числа. Например, при вызове функции:

document.getElementById('result').innerHTML = calculateResult(Number(a), Number(b), Number(c));
READ ALSO
Как можно удалить символы в одинаковых классах без замещения с помощью .text()? код внутри

Как можно удалить символы в одинаковых классах без замещения с помощью .text()? код внутри

Есть код который удаляет определённые символы (в частности "руб") в одинаковых классах

122
Работа с ответом REST API

Работа с ответом REST API

Доброго времени сутокРаботаю с vue, получаю ответы от сервера следующего вида:

163
Как выделить первую ячейку в первой строке в webix datatable

Как выделить первую ячейку в первой строке в webix datatable

Здравствуйте! Можете подсказать, как выделить первую ячейку таблицы datatable Параметры такие:

156
Поломался JSON.parse

Поломался JSON.parse

Добрый день! Ситуация такая: обрабатываю форму и на ее основании создаю ОбъектПеред отправкой AJAX- стрингую его JSON

157