Как сохранить пользовательский параметр в массив javascript?

#javascript #html

#javascript #HTML

Вопрос:

Я пытаюсь использовать цикл for, чтобы определить, какой код дополнительного продукта был выбран пользователем, и сохранить коды в массиве, а также использовать другой цикл for для определения названия дополнительного продукта и цены, используя операторы if..else . Ниже приведены коды:

 <!DOCTYPE html>
<html>
<head><title>Lab 8</title>

<script type="text/javascript">
function input()
    {
        var code, num_adult, num_child, name, price, addon, total, addon_total=0, addon_price, total_adult=0, total_child=0, i, j;
        var array=["A1","A2","A3"];
        var order;
        code = document.ticketfrm.mov_code.value;
        num_adult = document.ticketfrm.adult_qty.value;
        num_child = document.ticketfrm.child_qty.value;
        switch(code)
            {
                case "M1":
                    name="Jumanji";
                    price=12.90;
                    break;
                case "M2":
                    name="Coco";
                    price=10.50;
                    break;
                case "M3":
                    name="Blade Runner";
                    price=9.30;
                    break;
                case "M4":
                    name="The Foreign";
                    price=12.80;
                    break;
            }
        total_adult = price*num_adu<
        total_child = price*0.7*num_child;
        
        document.write("Movie Title : "  name  " (RM"    price.toFixed(2)   ")");
        document.write("</br>Adult Total : RM "  total_adult.toFixed(2)  " (" num_adult "x RM"  price.toFixed(2) ")");
        document.write("</br>Child Total : RM "  total_child.toFixed(2)  " (" num_child "x RM"  price*0.7.toFixed(2) ")");
        
        for(i=0; i<3; i  )//Use a for loop to identify which add-on food code was chosen by the user and store the codes in an array.
        {
            if(document.ticketfrm.add_on_code.checked)
                {
                    order = document.ticketfrm.add_on_code.value;
                    
                }
        }
        document.write(order);
        for(j = 0; j<3; j  )
            {
                if (order[j] = A1)
                    {
                        order_price = 7.9;
                    }
                else if (order[j] = "A2")
                    {
                        order_price = 5.5;
                    }
                else if (order[j] = "A3")
                    {
                        order_price = 3.5;
                    }
                addon_total= addon_total addon_price;
            }
        
        total = price   total_adult   total_child   addon_total;
        
        //display
        
        document.write("Add-On Total : RM "  addon_total);
        document.write("Add-On Detail : ");
        document.write("");
    }

</script>

</head>

<body>

<h3>Book A Movie Ticket</h3>
<p>Choose your movie and add-on</p>

<form name="ticketfrm">

    <p>Movie Title:
        <select name="mov_code">
            <option value="M1">Jumanji (RM 12.90)</option>
            <option value="M2">Coco (RM 10.50)</option>
            <option value="M3">Blade Runner (RM 9.30)</option>
            <option value="M4">The Foreigner (RM 12.80)</option>
            
        </select>
    <p>Adult : <input type="number" name="adult_qty" min="1" max="10" /></p>
    
    <p>Child : <input type="number" name="child_qty" min="0" max="10" /></p>
    
    <p>Add-Ons:
    <input type="checkbox" name="add_on_code" value="A1">Popcorn (RM 7.90)
    <input type="checkbox" name="add_on_code" value="A2">Nachos (RM 5.50)
    <input type="checkbox" name="add_on_code" value="A3">Soda (RM 3.50)
    </p>

    <p><input type="button" name="buybtn" value="Buy Now" onclick="input();" />

</form>


</body>

</html> 

Но цикл for не сработал, и он показывает ошибку при не удается прочитать свойство ‘add_on_code’ и ‘A1’ из undefined

Комментарии:

1. почему вы делаете document.ticketfrm ….. и используете let и const вместо var

Ответ №1:

Он возвращал неопределенный, поскольку ticketfrm в «document.ticketfrm» не существует, поскольку вы используете document.write, который создает отдельный новый документ.

Метод write() в основном используется для тестирования: если он используется после полной загрузки HTML-документа, он удалит весь существующий HTML.

Я также внес некоторые изменения в ваш код —

  • order должен быть массивом, и в первом цикле for вы должны использовать метод .push, чтобы поместить в него свои дополнительные заказы.
  • Второй цикл for должен иметь orders.length в качестве условия вместо его жесткого кодирования 3.
  • Если условия во втором цикле for, должны включать операторы равенства == или === .
  • Во втором цикле for переменная addon_price должна быть изменена вместо order_price . Таким образом, addon_total будет правильно рассчитан.
 <!DOCTYPE html>
<html>
<head><title>Lab 8</title>

<script type="text/javascript">
function input()
    {
        var code, num_adult, num_child, name, price, addon, total, addon_total=0, addon_price, total_adult=0, total_child=0, i, j;
        var array=["A1","A2","A3"];
        let order=[];
        const savedForm = document.ticketfrm;
        code = document.ticketfrm.mov_code.value;
        num_adult = document.ticketfrm.adult_qty.value;
        num_child = document.ticketfrm.child_qty.value;
        switch(code)
            {
                case "M1":
                    name="Jumanji";
                    price=12.90;
                    break;
                case "M2":
                    name="Coco";
                    price=10.50;
                    break;
                case "M3":
                    name="Blade Runner";
                    price=9.30;
                    break;
                case "M4":
                    name="The Foreign";
                    price=12.80;
                    break;
            }
        total_adult = price*num_adu<
        total_child = price*0.7*num_child;
        
        document.write("Movie Title : "  name  " (RM"    price.toFixed(2)   ")");
        document.write("</br>Adult Total : RM "  total_adult.toFixed(2)  " (" num_adult "x RM"  price.toFixed(2) ")");
        document.write("</br>Child Total : RM "  total_child.toFixed(2)  " (" num_child "x RM"  price*0.7.toFixed(2) ")");
        
        for(i=0; i<3; i  )//Use a for loop to identify which add-on food code was chosen by the user and store the codes in an array.
        {
            if(savedForm.add_on_code[i].checked)
                {
                    order.push(savedForm.add_on_code[i].value);
                    
                }
        }
        document.write("<br>");
        for(j = 0; j<order.length; j  )
            {
                if (order[j] == "A1")
                    {
                        addon_price = 7.9;
                    }
                else if (order[j] == "A2")
                    {
                        addon_price = 5.5;
                    }
                else if (order[j] == "A3")
                    {
                        addon_price = 3.5;
                    }
                addon_total= addon_total addon_price;
            }
        
        total = price   total_adult   total_child   addon_total;
        
        //display
        
        document.write("Add-On Total : RM "  addon_total);
        document.write("Add-On Detail : "   order);
        document.write("");
    }

</script>

</head>

<body>

<h3>Book A Movie Ticket</h3>
<p>Choose your movie and add-on</p>

<form name="ticketfrm">

    <p>Movie Title:
        <select name="mov_code">
            <option value="M1">Jumanji (RM 12.90)</option>
            <option value="M2">Coco (RM 10.50)</option>
            <option value="M3">Blade Runner (RM 9.30)</option>
            <option value="M4">The Foreigner (RM 12.80)</option>
            
        </select>
    <p>Adult : <input type="number" name="adult_qty" min="1" max="10" /></p>
    
    <p>Child : <input type="number" name="child_qty" min="0" max="10" /></p>
    
    <p>Add-Ons:
    <input type="checkbox" name="add_on_code" value="A1">Popcorn (RM 7.90)
    <input type="checkbox" name="add_on_code" value="A2">Nachos (RM 5.50)
    <input type="checkbox" name="add_on_code" value="A3">Soda (RM 3.50)
    </p>

    <p><input type="button" name="buybtn" value="Buy Now" onclick="input();" />

</form>


</body>

</html> 

Комментарии:

1. Просто убедитесь, что вы проголосовали и приняли ответ, если он разрешает ваш запрос. Спасибо 🙂