2014-02-13 5 views
-1

У меня есть задание на класс, и я очень смущен. Я сам выполнил полное задание, но этот бит меня достал.Могу ли я установить переключатель внутри переключателя?

В основном у меня есть так, что вы нажимаете на первого художника, который затем следует за местом (в зависимости от исполнителя), а затем в зависимости от места, где он перетекает на дату, а затем в зависимости от даты, которую он передает в билет стоимость и стоимость билета.

До сих пор у меня есть это:

function fillVenue() { 

    //retrieves index of selected artist and target element to be populated 
    var artist = document.getElementById("artist"); 
    var venue = document.getElementById("venue"); 
    var date = document.getElementById("date"); 
    var ticket = document.getElementById("tickets"); 
    var cost = document.getElementById("cost"); 

    // clears data from each category 
    venue.options.length = 0; 
    date.options.length = 0; 
    ticket.options.length = 0; 
    cost.options.length = 0; 

    // clearing event 
    venue.onchange = null; 

    // Collect and Calculate Total 
    function costTotal() { 
     if (ticket.selectedIndex != 0 && cost.selectedIndex != 0) { 
      var costTotal  = document.getElementById("costTotal"); 
      var ticketCount  = ticket.value; 
      var costAmount  = (cost.value).substr(1); 
      costTotal.value = " £" + ticketCount * costAmount; 
     } 
    } 
    ticket.onchange = costTotal; 
    cost.onchange = costTotal; 


    switch (artist.selectedIndex) { 
     case 0: 
     // list begins 
     // allows user to select venue 
      var venueList = ["Select Venue"]; 

     // allows user to select date 
      var dateList = ["Select Date"]; 

     // allows user to select ticket amount  
      var ticketList = ["Select Tickets"]; 

     // allows user to select price of ticket 
      var costList = ["Select Price"]; 

     // fills each category 
      fillList(venue, venueList); 
      fillList(date, dateList); 
      fillList(ticket, ticketList); 
      fillList(cost, costList); 
      break; 

     case 1: 
      // madonna 

     // allows user to select venue 
      var venueList = ["Select Venue", "London"]; 

     // allows user to select date 
     var dateList = ["Select Date", "17th July", "18th July"]; 

     // allows user to select ticket amount 
     var ticketList = ["Select Tickets", "1", "2", "3", "4", "5", "6"]; 

     // allows user to select price of ticket 
      var costList = ["Select Price", "£30", "£45", "£70"]; 

     // fills each category 
      fillList(venue, venueList); 
      fillList(date, dateList); 
      fillList(ticket, ticketList); 
      fillList(cost, costList); 
      break; 

     case 2: 
      //Rod Stewart 


     // allows user to select venue 
     var venueList = ["Select Venue", "Manchester", "Glasgow"]; 

     // allows user to select date 
     var dateList = ["Select Date"] 

     // allows user to select ticket amount 
     var ticketList = ["Select Tickets", "1", "2", "3", "4", "5", "6"]; 

     // allows user to select price of ticket 
     var costList = ["Select Price", "£30", "£45", "£70"]; 

     //fills each category 
      fillList(venue, venueList); 
      fillList(date, dateList); 
      fillList(ticket, ticketList); 
      fillList(cost, costList); 

      // onchange event - selected Rod Stewart 
      venue.onchange = function() { 
       var dateList; 
       switch(venue.selectedIndex) { 
        case 0: dateList = ["Select Date"]; break; 
        case 1: dateList = ["Select Date", "18th July", "20th July"]; break; 
        case 2: dateList = ["Select Date", "22nd July", "23rd July"]; break; 
       } 
       fillList(date, dateList); 
      } 
      break; 

     case 3: 
      //Guns and Roses 
      var venueList = ["Select Venue", "London"]; 
      var dateList = ["Select Date", "10th July"]; 
      var ticketList = ["Select Tickets", "1", "2", "3", "4", "5", "6"]; 
      var costList = ["Select Price", "£88"]; 
      fillList(venue, venueList); 
      fillList(date, dateList); 
      fillList(ticket, ticketList); 
      fillList(cost, costList); 
      break; 

     case 4: 
      // Oasis 
      var venueList = ["Select Venue", "London", "Glasgow", "Nottingham"]; 
      var dateList = ["Select Date"]; 
      var ticketList = ["Select Tickets", "1", "2", "3", "4", "5", "6"]; 
      var costList = ["Select Price"]; 

      fillList(venue, venueList); 
      fillList(date, dateList); 
      fillList(ticket, ticketList); 
      fillList(cost, costList); 


      venue.onchange = function () { 
       var dateList; 
       switch(venue.selectedIndex) { 
        case 0: dateList = ["Select Date"]; break; 
        case 1: dateList = ["Select Date", "23rd July", "24th July"]; break ; 
        case 2: dateList = ["Select Date", "21st July"]; break; 
        case 3: dateList = ["Select Date", "18th July", "19th July"]; break; 
       } 

      cost.onchange = function () { 
       var costList; 
       switch(cost) { 
        case 0: costList = ["Select Price"]; 
        case 1: costList = ["Select Price", "£45", "£60"]; 
        case 2: costList = ["Select Price", "£45", "£65"]; 
        case 3: costList = ["Select Price", "£25", "£45", "£65"]; 
       } 
      } 
       fillList(date, dateList); 
       fillList(cost, costList); 
      } 
      break; 


     case 5: 
      //Beyonce 
      var venueList = ["Select Venue", "Glasgow", "Manchester", "Birmingham", "London"]; 
      var dateList = ["Select Date"]; 
      var ticketList = ["Select Tickets", "1", "2", "3", "4", "5", "6"]; 
      var costList = ["Select Price"]; 
      fillList(venue, venueList); 
      fillList(date, dateList); 
      fillList(ticket, ticketList); 
      fillList(cost, costList); 
      break; 
    } 
} 

function fillList(list,items) { 
    list.options.length = 0; 
    for (var i = 0; i < items.length; i++) { 
     var option = new Option(items[i]); 
     list.options[i] = option; 
    } 
} 

Они полный код работает до «Oasis» ниспадающего. Где даты и место встречи просто не складываются. Фактически цена просто остается на «цене выбора», и цены не появляются.

Я думал о добавлении оператора IF, но я не уверен, что это возможно) б) хорошая идея.

Заранее спасибо.

+0

также: Мне сказали, что есть другие способы сделать это, но предпочтительно (если это вариант), я хотел бы сохранить аналогичный вид кодирования, который у меня есть. – user3307086

+5

Эта стенка кодов ... Если вы просто хотите знать, можете ли вы разместить переключатель внутри коммутатора, короткий ответ - да, вы можете. –

+0

Вопрос внизу, спрашивая, как это сделать. Извините, забыл добавить его в начало! :) – user3307086

ответ

0

a) Возможно установить переключатель внутри выключателя. Почему бы и нет?

switch (something) { 
    case 1: 
     switch (something else) { 
      case "A": 
       // do it 
       break; 
      case "B": 
       // do other things 
       break; 
      default: 
       // maybe do this or that 
       break; 
     } 
     break; 
    case 2: 
     // anything else 
     break 
    default: 
     // whatever 
     break 
} 

б) if внутри case с также возможно.

c) Ваша полная структура просто кажется неправильной ... вы, кажется, не делаете разные вещи в каждом случае, просто одно и то же с разными параметрами. Если это так, не используйте switch/case или if/else, а создайте функцию, которая принимает параметры и действует соответственно. Это называется DRY: «Не повторяйте себя». Не пишите ни кода, ни дважды. Если вам это нужно, это явно код, который принадлежит некоторой функции.

Сохраните эти данные в другом формате. Например, многоразмерный массив. Объекты JavaScript. Или используйте базы данных, если это возможно - для чего они все-таки нужны.

+0

спасибо @Derek 朕 會 功夫 за то, что он испортил этот беспорядок! На самом деле вы были правы - это набрало мой телефон. В конце концов, это не допустимое оправдание, так как есть автокоррекция, я просто слишком ленив, чтобы переключить его на английский ... –

Смежные вопросы