Я работаю над небольшим проектом здесь, и я получаю это сообщение «слишком много рекурсии», когда явно не так много.Почему возникает ошибка «Слишком много рекурсии»?
Это соответствующий HTML код
<div id="speed">
<label for="spe">Input speed</label>
<input type="text" id="spe" onkeydown="if (event.keyCode == 13){ javascript:CalcBySpeed(); return false; }" />
<input type="button" name="Sumbit" value="Submit" onclick="javascript:CalcBySpeed()" />
</div>
и стол, как правило, глядя, как это:
<tr>
<td id="50">
<p id="117">5</p>
</td>
<td id="51">
<p id="118">20</p>
</td>
<td id="52">
<p id="119">5</p>
</td>
<td id="53">
<p id="120">1,2</p>
</td>
</tr>
И мои функции JavaScript являются:
function CalcBySpeed() {
var input = "a";
input = parseFloat(document.getElementById("spe").value) * 100;
if (input < 5089) {
getValueBySpeed(input - 3);
} else {
alert("Value undefined!");
}
};
function getValueBySpeed(input) {
if (document.getElementById(input) != null) {
document.getElementById(input).style.backgroundColor = "yellow";
document.getElementById(input + 1).style.backgroundColor = "yellow";
document.getElementById(input + 2).style.backgroundColor = "yellow";
document.getElementById(input + 3).style.backgroundColor = "yellow";
document.getElementById("res1").innerHTML = document.getElementById(input + 3).innerHTML;
document.getElementById("res2").innerHTML = document.getElementById(input + 2).innerHTML;
document.getElementById("res3").innerHTML = document.getElementById(input + 1).innerHTML;
document.getElementById("res4").innerHTML = document.getElementById(input).innerHTML;
} else {
getValueBySpeed(input++);
}
}
Так что, если я решу для ввода в мое поле ввода:
1.2
, JS подчеркивает этот конкретный строк успешно1.19
JS подчеркивает ту же самую строку успешно0.97
JS подчеркивает ту же строку успешно
Однако когда я ввода:
1.1
Вход в системуtoo much recursion
Я считаю, что, когда я входной 0.97
есть гораздо более рекурсия, до сих пор проблема, когда я ввод числа между 1.09
и 1.16
.
Вне этого диапазона, кажется, нет проблем.
Это проблема округления. '1.1 * 100 = 110.00000000000001'. Затем, когда вы добавляете 1 для каждого вызова, число никогда не будет целым. Элемент с id 'xxxx.00000000000001' никогда не будет найден. –
Всякий раз, когда вы используете рекурсию, не забывайте о состоянии завершения. – Givi
@SaniHuttunen, спасибо! Я проанализировал «ввод» на целое число, и теперь он работает правильно! Опубликуйте свой комментарий в качестве ответа, поэтому я могу выбрать его как «Лучший ответ»: d – user2997637