Javascript - Массив очищает значение при закрытии функции - PullRequest
2 голосов
/ 22 ноября 2011

У меня есть функция, которая вычисляет общую квоту для заказа, которая затем предупреждает пользователя о выводе.Я также хочу, чтобы итоговая цитата сохранялась в массиве, поэтому можно вызывать отдельную функцию, которая будет отображать все значения в массиве (отображать все цитаты с момента загрузки страницы).Из того, что я могу понять, массив теряет значение, выдвинутое функцией, когда функция завершается, и я поигрался с областью действия массива без удовольствия и был бы признателен за толчок в правильном направлении.

<form>

<table id="kit" cellpadding="2" cellspacing="5">    

<th colspan="2" align="center"><h3>Purchase Shirts (Coming Soon)</h3></th>

<tr><td class="titles">Size</td>
    <td class="titles">Qty</td></tr>

<tr><td>Small (£10)</td>
<td><input type="text" size="3" maxlength="5" name="small" /></td>

<tr><td>Medium (£12)</td>
<td><input type="text" size="3" maxlength="5" name="medium" /></td>

<tr><td>Large (£15)</td>
<td><input type="text" size="3" maxlength="5" name="large" /></td>

<tr><td>X-Large (£20)</td>
<td><input type="text" size="3" maxlength="5" name="xlarge" /></td>

<tr><td colspan="2" align="center">
    <input class="submit" type="submit" onClick="return calculateShirts(this)" value="Get Quote" /></td>

</tr>   
</table>
</form>

JavaScript ------------

var totalQuotes = [1,2]; //Initialise the global array with example values


function calculateShirts(form) //Function to calculate shirt 'quote'
{   
    //Assign Prices for Each Shirt Size
    var sml = 10;
    var med = 12;
    var lge = 15;
    var xl = 20;

    //Save the user inputs as variables
    var smlQu = form.small.value;
    var medQu = form.medium.value;
    var lgeQu = form.large.value;
    var xlQu = form.xlarge.value;

    //Multiply the Price by the User Input and save as variable
    var smlQuote = (sml * smlQu);
    var medQuote = (med * medQu);
    var lgeQuote = (lge * lgeQu);
    var xlQuote = (xl * xlQu);      

    //Add the calculated values together to get the total price
    var finalQuote = (smlQuote + medQuote + lgeQuote + xlQuote);

    //Create an array containing the quotes
    var arrayQuote = [smlQuote, medQuote, lgeQuote, xlQuote, finalQuote];

    //Variable containing the formatted output of quotes
    var output = "Your Kit Quote \n\n Small - £" + arrayQuote[0] + "\n" + "Medium - £" + quoteArray[1] + "\n" + "Large - £" + quoteArray[2] + "\n" + "X-Large - £" + quoteArray[3] + "\n\n" + "Total - £" + quoteArray[4];

    //Display the output variable in a popup box
    alert(output);


    totalQuotes.push(finalQuote);

    alert(totalQuotes); //This alert does show the calculated value
    return false;

}   



function printQuotes() //Function called on to display array values
{

    for (i in totalQuotes) {
        alert(totalQuotes[i]);

           //The calculated value is no longer in the array

    }

}

1 Ответ

0 голосов
/ 22 ноября 2011

Это прекрасно работает для меня.Там есть какая-то синтаксическая ошибка:

var output = "Your Kit Quote \n\n Small - £" + arrayQuote[0] + "\n" + "Medium - £" + quoteArray[1] + "\n" + "Large - £" + quoteArray[2] + "\n" + "X-Large - £" + quoteArray[3] + "\n\n" + "Total - £" + quoteArray[4];

Сначала вы ссылаетесь на arrayQuote, затем переходите в quoteArray, которого не существует.Не уверен, что это просто опечатка при публикации вопроса здесь.

С учетом этих значений, которые я жестко запрограммировал:

var smlQu = 2;
var medQu = 1;
var lgeQu = 3;
var xlQu = 5; 

alert(totalQuotes); // returns 1,2,177

printQuotes(); // returns alerts  with  1 then 2 then 177

, чтобы остановить обновление формы, добавьте эту строку в конец файла convertShirts.():

return false;

и измените форму при отправке с:

onsubmit="calculateShirts(this)" to onsubmit="return calculateShirts(this)"

, если вы все еще хотите запустить метод печати, просто вызовите его до возврата false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...