Я пишу вычисления по сложной формуле(на картинке)[![введите сюда описание изображения][1]][1]. Как видно,есть промежуточное вычисление значения Pтр, которое я описал в функции calc2. Но по-моему скрипту это значение Pтр и итоговое G не считается,помогите в чём дело? function areaRectangle8() { this.calc2(); var m1 = +document.forma1.t26.value || 0; var p1 = +document.forma1.t28.value || 0; var p2 = +document.forma1.t29.value || 0; var V = document.forma1.t30.value || 0; if ((m1 == 0) || (p == 0) || (p1 == 0) || (p2 == 0)) { alert('Входные данные не могут быть равны 0'); return; } if ((m1 < 0) || (p < 0) || (p1 < 0) || (p2 < 0)) { alert('Входные данные не могут быть меньше 0'); return; } var G = (p * V) / (1 + m1); document.forma1.res8.value = G.toFixed(2); } function calc2() { //в подрасчёте есть промежуточное значение p console.log(1); //пользователь узнает чему равно p, только после ввода p1,p2 и m var m1 = +document.forma1.t26.value || 0; var p1 = +document.forma1.t27.value || 0; var p2 = +document.forma1.t28.value || 0; var p = (1 + m1) * p1 * p2 / (p2 + m1 * p1); document.forma1.t29[0].value = m1; document.forma1.t29[1].value = p1; document.forma1.t29[2].value = p2; document.forma1.t29[3].value = p; } document.addEventListener("DOMContentLoaded", function (event) { document.forma1.t26.addEventListener("keyup", calc2); document.forma1.t27.addEventListener("keyup", calc2); document.forma1.t28.addEventListener("keyup", calc2); }); [1]: http://i.stack.imgur.com/oLNHC.png <table align="center"> <p align="center">Количество сухого тампонажного цемента</p> <tr><td height="40px"> <div class="price">Жидкостно-цементное отношение;</div><input name="t26" id="t26" type="text" align="right" size="4" maxlength="8" onkeyup="return proverka(this)"> </td> </tr> <tr><td height="40px"> <div class="price">Плотность цемента т/м<sup>3</sup>.</div><input name="t27" id="t27" type="text" align="right" size="4" maxlength="8" onkeyup="return proverka(this)"> </td> </tr> <tr><td height="40px"> <div class="price">Плотность жидкости затворения, т/м<sup>3</sup>.</div><input name="t28" id="t28" type="text" align="right" size="4" maxlength="8" onkeyup="return proverka(this)"> </td> </tr> <tr><td height="40px"> <div class="price">Плотность тампонажного раствора;</div><input name="t29" id="t29" type="text" align="right" size="4" maxlength="8" onkeyup="return proverka(this)"> </td> </tr> <tr><td height="40px"> <div class="price">Общий объем тампонажного раствора;</div><input name="t30" id="t30" type="text" align="right" size="4" maxlength="8" onkeyup="return proverka(this)"> </td> </tr> <tr><td> <input type="button" name="button" value="Вычислить" onClick="areaRectangle8();"> <input type="text" name="res8" size="10"> </td></tr> </table>
Свой скрипт я немного изменил,но он всё ещё не работает: Вычисление значения p я исправил, но теперь ошибка только в вычислении итогового значения G (ошибка на картинке) Код: function areaRectangle8(){ this.calc2(); var m1=+document.forma1.t26.value||0; var p1=+document.forma1.t28.value||0; var p2=+document.forma1.t29.value||0; var V=document.forma1.t30.value||0; if((m1 ==0)||(p1 ==0)||(p2 ==0)) { alert('Входные данные не могут быть равны 0'); return; } if((m1 <0)||(p1 <0)||(p2 <0)) { alert('Входные данные не могут быть меньше 0'); return; } var G =(p*V)/(1+m1); document.forma1.res8.value = G.toFixed(2); } function calc2(){//в подрасчёте есть промежуточное значение p console.log(1);//пользователь узнает чему равно p, только после ввода p1,p2 и m var m1 =+document.forma1.t26.value||0; var p1 =+document.forma1.t27.value||0; var p2 =+document.forma1.t28.value||0; var p =(1+m1)*p1*p2/(p2+m1*p1); document.forma1.t29[0].value = m1; document.forma1.t29[1].value = p1; document.forma1.t29[2].value = p2; document.forma1.t29[3].value = p.toFixed(2); } document.addEventListener("DOMContentLoaded",function(event){ document.forma1.t26.addEventListener("keyup", calc2); document.forma1.t27.addEventListener("keyup", calc2); document.forma1.t28.addEventListener("keyup", calc2); }); HTML: <form name="forma1" style="background-color:#44944A;"> <!-- поменяю цвет формы --> <div id="resizable"> <br> <table align="center"> <p align="center">Количество сухого тампонажного цемента</p> <tr><td height="40px"> <div class="price">Жидкостно-цементноеотношение;</div><input name="t26" id="t29" type="text" align="right" size="4" maxlength="8" onkeyup="return proverka(this)"> </td> </tr> <tr><td height="40px"> <div class="price">Плотностьцементат/м<sup>3</sup>.</div><input name="t27" id="t29" type="text" align="right" size="4" maxlength="8" onkeyup="return proverka(this)"> </td> </tr> <tr><td height="40px"> <div class="price">Плотностьжидкостизатворения,т/м<sup>3</sup>.</div><input name="t28" id="t29" type="text" align="right" size="4" maxlength="8" onkeyup="return proverka(this)"> </td> </tr> <tr><td height="40px"> <div class="price">Плотностьтампонажногораствора;</div><input name="t29" id="t29" type="text" align="right" size="4" maxlength="8" onkeyup="return proverka(this)"> </td> </tr> <tr><td height="40px"> <div class="price">Общийобъемтампонажногораствора;</div><input name="t30" id="t30" type="text" align="right" size="4" maxlength="8" onkeyup="return proverka(this)"> </td> </tr> <tr><td> <input type="button" name="button" value="Вычислить" onClick="areaRectangle8();"> <input type="text" name="res8" size="10"> </td></tr> </table> </div> <br> </form>
Скрипт свой я снова исправил, Но обЪясните мне пожалуйста как можно будет обходить,или исправить вывод значения NaN. И если возможно то как реализовать следующее: в условиях заданы ограничения, что вводимые данные не должны быть меньше нуля и при этом равными нулю, Но пользователь об этом узнает только после нажатия кнопки вычислить, а можно ли переделать, чтобы диалоговое окно о предупреждении или ошибки выходило бы при нажатии на текстовое поле куда вводим данные ? (чтобы пользователь сразу увидел свою ошибку в вводимых данных и её исправил бы) Этот скрипт исправленный Код: function areaRectangle8(){ this.calc2(); var m1 = document.forma1.t26.value||0; var p1 = document.forma1.t27.value||0; var p2 = document.forma1.t28.value||0; var p = (1+m1)*p1*p2/(p2+m1*p1); if ( (m1 == 0) || (p1 == 0) || (p2 == 0) ) { alert('Входные данные не могут быть равны 0'); return; } if ( (m1 < 0) || (p1 < 0) || (p2 < 0) ) { alert('Входные данные не могут быть меньше 0'); return; } var V=document.forma1.t30.value||0; var G=(p*V)/(1+m1); document.forma1.res8.value=G.toFixed(2); } function calc2() { //в подрасчёте есть промежуточное значение p console.log(1); //пользователь узнает чему равно p, только после ввода p1,p2 и m var m1 = +document.forma1.t26.value||0; var p1 = +document.forma1.t27.value||0; var p2 = +document.forma1.t28.value||0; var p = (1+m1)*p1*p2/(p2+m1*p1); document.forma1.t29[0].value = m1; document.forma1.t29[1].value = p1; document.forma1.t29[2].value = p2; document.forma1.t29[3].value = p.toFixed(2); } document.addEventListener("DOMContentLoaded", function (event) { document.forma1.t26.addEventListener("keyup", calc2); document.forma1.t27.addEventListener("keyup", calc2); document.forma1.t28.addEventListener("keyup", calc2); }); HTML: <form name="forma1" style="background-color:#44944A;"> <!-- поменяю цвет формы --> <div id="resizable"> <br> <table align="center"> <p align="center">Количество сухого тампонажного цемента</p> <tr><td height="40px"> <div class="price">Жидкостно-цементное отношение;</div><input name="t26" id="t29" type="text" align="right" size="4" maxlength="8" onkeyup="return proverka(this)"> </td> </tr> <tr><td height="40px"> <div class="price">Плотность цемента т/м<sup>3</sup>.</div><input name="t27" id="t29" type="text" align="right" size="4" maxlength="8" onkeyup="return proverka(this)"> </td> </tr> <tr><td height="40px"> <div class="price">Плотность жидкости затворения, т/м<sup>3</sup>.</div><input name="t28" id="t29" type="text" align="right" size="4" maxlength="8" onkeyup="return proverka(this)"> </td> </tr> <tr><td height="40px"> <div class="price">Плотность тампонажного раствора;</div><input name="t29" id="t29" type="text" align="right" size="4" maxlength="8" onkeyup="return proverka(this)"> </td> </tr> <tr><td height="40px"> <div class="price">Общий объем тампонажного раствора;</div><input name="t30" id="t30" type="text" align="right" size="4" maxlength="8" onkeyup="return proverka(this)"> </td> </tr> <tr><td> <input type="button" name="button" value="Вычислить" onClick="areaRectangle8();"> <input type="text" name="res8" id="res8" size="10"> </td></tr> </table> </div> <br> </form> В форме 4одинаковых id нужно для вычисления по формуле промежуточного значения p, и причём это правильно работает