Пусть JavaScript ответит в текстовом поле, а не во всплывающем окне! - PullRequest
3 голосов
/ 03 февраля 2010

У меня есть этот код в заголовке:

<script LANGUAGE="JavaScript">
<!--
function calculate(form)

        {

                height = eval(form.height.value)
                width = eval(form.width.value)
                photos = eval(form.photos.value)
                lgtext = eval(form.lgtext.value)
                mountlam = eval(form.mount.value)
                mountlam = eval(form.lam.value)
                GetPriceOne (form, height, width, photos, lgtext, mount, lam) 

        }

        function GetPriceOne(form, height, width, photos, lgtext, mount, lam)

        {

                PriceOne = height * width
                GetPriceTwo(form, height, width, photos, lgtext, mount, lam, PriceOne)
        }

        function GetPriceTwo(form, height, width, photos, lgtext, mount, lam, PriceOne)

        {

                PriceTwo = PriceOne / 144
                GetPriceThree(form, height, width, photos, lgtext, mount, lam, PriceTwo)

        }

        function GetPriceThree(form, height, width, photos, lgtext, mount, lam, PriceTwo)

        {

                PriceThree = PriceTwo * 15
                GetPriceFour(form, height, width, photos, lgtext, mount, lam, PriceThree)

        }

        function GetPriceFour(form, height, width, photos, lgtext, mount, lam, PriceThree)

        {

                if(form.lgtext.checked)
                {
                        PriceFour = PriceThree + 20
                        GetPriceFive(form, height, width, photos, lgtext, mount, lam, PriceFour)
                }
                else
                {
                        PriceFour = PriceThree
                        GetPriceFive(form, height, width, photos, lgtext, mount, lam, PriceFour)
                }

        }

        function GetPriceFive(form, height, width, photos, lgtext, mount, lam, PriceFour)

        {

                if(form.mount.checked)
                {
                        PriceFive = PriceFour + PriceTwo * 5
                        GetPriceSix(form, height, width, photos, lgtext, mount, lam, PriceFive)
                }
                else
                {
                        PriceFive = PriceFour
                        GetPriceSix(form, height, width, photos, lgtext, mount, lam, PriceFive)
                }

        }

        function GetPriceSix(form, height, width, photos, lgtext, mount, lam, PriceFive)

        {

                if(form.lam.checked)
                {
                        PriceSix = PriceFive + PriceTwo * 5
                        GetPriceSeven(form, height, width, photos, lgtext, mount, lam, PriceSix)
                }
                else
                {
                        PriceSix = PriceFive
                        GetPriceSeven(form, height, width, photos, lgtext, mount, lam, PriceSix)
                }

        }


        function GetPriceSeven(form, height, width, photos, lgtext, mount, lam, PriceSix)

        {

        total = (photos * 4.95) + PriceSix
        WriteDocument(total)

        }

        function RoundToPennies(n)

        {

        pennies = n * 100;
        pennies = Math.round(pennies);
        strPennies = "" + pennies;
        len = strPennies.length;
        return strPennies.substring(0, len - 2) + "." + strPennies.substring(len - 2, len);

        }

        function WriteDocument(total)

        {

                alert("Estimated price of this collage is ONLY $" + RoundToPennies(total))
        }
//-->
</script>

Если я хочу, чтобы он вошел в это текстовое поле, что мне нужно сделать с функцией?Пожалуйста помоги!Я занимался этим часами и перепробовал все, что знаю !!!Вот текущая страница, работающая с всплывающим предупреждением: http://procollage.com/site10/pricing/photo-collage-pricing.html

Ответы [ 3 ]

3 голосов
/ 03 февраля 2010

Что пытается сделать эта строка?

height = eval(form.height.value)

Если вы просто пытаетесь прочитать ее как число, сделайте это:

height = parseFloat(form.height.value);

В любом случаеизмените функцию WriteDocument следующим образом:

function WriteDocument(total) {
    document.yourFormName.collageEstimate.value = "Estimated price of this college "
                                           + "is ONLY $" + RoundToPennies(total);
}

Вам нужно, чтобы ваш HTML выглядел примерно так:

<form name="yourFormName">
    <input type="text" name="collageEstimate" size="25" />
    <input type="button" value="Calculate Estimate" name="B1" onclick="calculate(this.form)" />
</form>
0 голосов
/ 03 февраля 2010

Хорошо, чтобы показать вычисленное значение в текстовом вводе, вы должны получить ссылку на него, например:

function WriteDocument(total) {
  document.forms['myForm'].elements['collageEstimate'].value = RoundToPennies(total);
}

Вам просто нужно заменить myForm на имя вашей формы.

Но у меня есть пара комментариев к вашему коду, кроме вашего основного вопроса:

  1. Вам не нужно использовать eval для преобразования значения String в Number, вы можете просто использовать унарный оператор плюс, конструктор Number, вызываемый как функция, или parseFloat:

    var height = +form.height.value; // or
    var height = Number(form.height.value); // or
    var height = parseFloat(form.height.value);
    
  2. Вы должны объявить свои переменные с помощью оператора var, в противном случае, если они не найдены в текущей области видимости, они станут глобальными переменными. e.g.:

    //...
    var total = (photos * 4.95) + PriceSix;
    
  3. Я бы также рекомендовал использовать точки с запятой в присваиваниях, вызовах функций и операторах возврата.

0 голосов
/ 03 февраля 2010

Вы можете попробовать:

document.getElementById('collageEstimate').value = yourvalue

РЕДАКТИРОВАТЬ: я вижу, у вас есть name=collageEstimate, вы можете изменить на id=collageEstimate.

...