Ошибка в скрипте - If ... Else ... и цикл For
<script> function Calc() { var priceitem = Number(document.getElementById('priceitem').value) alert (priceitem) var priceenchant = Number(document.getElementById('priceenchant').value) alert (priceenchant) var basicchance = Number(document.getElementById('basicchance').value) alert (basicchance) var safetyenchant = Number(document.getElementById('safetyenchant').value) alert (safetyenchant) var levelenchant = Number(document.getElementById('levelenchant').value) alert (levelenchant) var sum=0 var sumpriceitem = 0 if (levelenchant >= 0) and (levelenchant=<20) { if (basicchance >=1) and (basicchance=<100) { if (levelenchant > safetyenchant) { for (i=1; levelenchat-safetyenchant; i++) { sum = sum + (1 - (basicchance / 100) ^ i) * priceitem } } sumpriceitem = priceitem + priceenchant * levelenchant + sum document.getElementById('summary').value = sumpriceitem } else { alert=("Chance of successful enchant incorrect. Please, re-enter chance of enchant from 0 to 100") } } else { alert=("Level of enchant incorrect. Please, re-enter level of enchant from 0 to 20") } } </script> Код:
<textarea id="priceitem" rows="1" value="100"></textarea> |
Обратите внимание на синтаксис...
if ( levelenchant >= 0 && levelenchant =< 20 ) |
<script> function Calc() { var priceitem = Number(document.getElementById('priceitem').value) alert (priceitem) var priceenchant = Number(document.getElementById('priceenchant').value) alert (priceenchant) var basicchance = Number(document.getElementById('basicchance').value) alert (basicchance) var safetyenchant = Number(document.getElementById('safetyenchant').value) alert (safetyenchant) var levelenchant = Number(document.getElementById('levelenchant').value) alert (levelenchant) var sum=0 var sumpriceitem = 0 if ((levelenchant >= 0) && (levelenchant<=20)) { if ((basicchance >=1) && (basicchance<=100)) { if (levelenchant > safetyenchant) { for (i=1; levelenchat-safetyenchant; i++) { sum = sum + (1 - (basicchance / 100) ^ i) * priceitem } } sumpriceitem = priceitem + priceenchant * levelenchant + sum document.getElementById('summary').value = sumpriceitem } else { alert=("Chance of successful enchant incorrect. Please, re-enter chance of enchant from 1 to 100") } } else { alert=("Level of enchant incorrect. Please, re-enter level of enchant from 0 to 20") } } </script> К сожалению, не работает. |
Areso,
а как насчёт в коде поставить для начала ; ? обязательный синтаксис языка никто не отменял ещё |
for (i=1; levelenchat-safetyenchant; i++) Вечный цикл |
Цитата:
"Как и во многих языках, предложения на языке javascript можно разделять точкой с запятой. Но при переходе на новую строку в javascript точка с запятой становится необязательна, ее можно не ставить. Эти две строки полностью эквивалентны: a = 5 a = 5; " (С) javascript.ru/для чайников Цитата:
почему вечный? старт. значение = 1, значение окончания цикла есть, вычисляемое значение, приращение задано - раз приращение задано, цикл не может быть вечным. UPD: нашел ошибку в переменной. Результат не изменился. Ну не вижу я ошибок, замылился глаз от постоянных переписываний и издевательств над тестовым сайтом этим несчастным кодом. |
Цитата:
if (1-2) alert(1) if (1-1) alert(2) if (2-1) alert(3) Если разность не будет равна нулю - цикл так и будет крутиться... Вот что у автора if (*!*levelenchant > safetyenchant*/!*) { for (i=1; levelenchat-safetyenchant; i++) { sum = sum + (1 - (basicchance / 100) ^ i) * priceitem } } Разность всегда больше нуля - цикл вечный. |
Чего-то недопонимаю в логике конструкций.
Это же не while loop. Здесь четко указано от какого значения и до какого... Рабочие значения для этого цикла: levelenchant = от 0 до 20, но как правило больше 4 и до 20 (из усл. выше). По умолчанию 4 safetyenchant = как правило, значение ровно 3. Теперь, я инициирую цикл от 1 до (4-3) с приращением +1. Должен выполнится 1 раз. Причем здесь условия? Вот код этой же программы, написанной на VB6 (рабочий) Код:
If levelenchant >= 0 And levelenchant <= 20 Then |
Цитата:
http://javascript.ru/for |
Цитата:
|
Часовой пояс GMT +3, время: 19:45. |