Не работает вычисление

Тема в разделе "JavaScript", создана пользователем Remca, 7 май 2016.

  1. Remca

    Remca

    Регистрация:
    3 май 2016
    Сообщения:
    0
    Симпатии:
    0
    Я пишу вычисления по сложной формуле(на картинке)[![введите сюда описание изображения][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>
     
  2. Remca

    Remca

    Регистрация:
    3 май 2016
    Сообщения:
    0
    Симпатии:
    0
    [​IMG]

    Свой скрипт я немного изменил,но он всё ещё не работает: Вычисление значения 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>
    

    [​IMG]
     
  3. Remca

    Remca

    Регистрация:
    3 май 2016
    Сообщения:
    0
    Симпатии:
    0
    Скрипт свой я снова исправил, Но обЪясните мне пожалуйста как можно будет обходить,или исправить вывод значения 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, и причём это правильно работает