2015-04-21 2 views
1

Привет всем Я работаю на PHP appliaction где я заселить Dropbox на основе другого выбора падения ящика с помощью JavaScript - все работает нормально, но вторые значения Dropbox является номера, мой вопрос is Как установить значения второго dropbox равным текст не номера который я получаю.Как получить выпадающие значения в PHP

У меня есть следующий код выпадающего списка:

<!-- Our food group drop down--> 
    <select id="foodgroups" onchange="selectFoods(this.options[this.selectedIndex].id)"> 
     <option id="1" value="">Select a Food Group</option> 
     <option id="2"value="Fruit">Fruit</option> 
     <option id="3" value="Vegetables">Vegetables</option> 
     <option id="4" value="Meat">Meat</option> 
     <option id="5" value="Dairy">Dairy</option> 
     <option id="6" value="Grains">Grains</option> 
    </select> 

    <!-- Our foods for a group selection (empty on default) --> 


<select id="foods" name="selectedFoodItem"></select> 

Вот функция, которая населяет во втором выпадающем списке

function selectFoods(foodGroup) { 
     // Get a reference to the foods select. 
     var foodsSelect = document.getElementById("foods"); 

     // Create a two dimension array containing foods for each group. 
     var foods = [["Banana","Grapes","Oranges","Watermelon"], 
        ["Brocolli", "Califlower","Spinach","Tomatoes"], 
        ["Beef", "Chicken", "Turkey", "Tuna"], 
        ["Cheese", "Ice Cream", "Milk", "Yogurt"], 
        ["Bread", "Pasta", "Rice", "Quinoa"]]; 

     if ((foodGroup >= 0) && (foodGroup <= foods.length)) { 
      foodsSelect.options.length = 0; 

      // Index was in range, so access our array and create options. 
      for (var i = 0; i < foods[foodGroup - 1].length; i++) { 
       foodsSelect.options[foodsSelect.options.length] = new Option(foods[foodGroup - 1][i], i); 
      } 

     } 
    } 

Я пытался получить доступ к значению в PHP $val = $_POST['selectedFoodItem']; я получаю индекс

Спасибо!

+0

попробуйте 'onchange =" selectFoods (this.options [this.selectedIndex] .value) "'? – Noman

ответ

1

Поскольку начало ID на 2 (действительные) и индекс выбора продуктов начинаются с двух, просто получите идентификатор, затем - 2, после запуска функции, затем используйте это как индекс внутри вашего выбора массива и запустите все эти значения внутри, чтобы создать разметку:

function selectFoods(foodGroup) { 
    // Get a reference to the foods select. 
    var foodsSelect = document.getElementById("foods"); 

    // Create a two dimension array containing foods for each group. 
    var foods = [["Banana","Grapes","Oranges","Watermelon"], 
       ["Brocolli", "Califlower","Spinach","Tomatoes"], 
       ["Beef", "Chicken", "Turkey", "Tuna"], 
       ["Cheese", "Ice Cream", "Milk", "Yogurt"], 
       ["Bread", "Pasta", "Rice", "Quinoa"]]; 

    var options = ''; 
    var selected = foodGroup.id - 2; // get the ID minus 2 
    var l = foods[selected].length; 
    for(var i = 0; i < l; i++) { // loop foods and get the selected thru the index selected 
     options += '<option value="' + foods[selected][i] + '">' + foods[selected][i] + '</option>'; 
    } 

    foodsSelect.innerHTML = options; 
} 

Sample Output

+0

Я хотел бы предложить одно изменение. Не повторяйте длину в цикле for. Сохраните значение в переменной перед циклом for и используйте это вместо. – RST

+0

@RST там, намного лучше – Ghost

+0

Спасибо Привидение ваше решение действительно сработало для меня. #KeepKooKeeng – Terabyte

1

Ваш PHP код получает индекс, а не строковое значение вы ожидаете из этой строки кода:

new Option(foods[foodGroup - 1][i], i); 

Первый аргумент - это значение, которое вы видите при выборе, а второе - значение, которое отправляется на сервер. В вашем примере, один из вариантов будет оказана следующим образом:

<option value="0">Brocolli</option> 

Если вы хотите, чтобы на стороне сервера, чтобы получить "Broccoli" изменение кода Option следующим образом:

new Option(foods[foodGroup - 1][i], foods[foodGroup - 1][i]); 

, что приводит к:

<option value="Brocolli">Brocolli</option> 

Пример http://jsfiddle.net/4298w4ob/

+0

Это «Брокколи», кстати. – Danilo

+0

Спасибо Данило :) ты лучший, – Terabyte

1

Изменить этот код скрипта.

function selectFoods(foodGroup) { 
     // Get a reference to the foods select. 
     var foodsSelect = document.getElementById("foods"); 

     // Create a two dimension array containing foods for each group. 
     var foods = [["Banana","Grapes","Oranges","Watermelon"], 
        ["Brocolli", "Califlower","Spinach","Tomatoes"], 
        ["Beef", "Chicken", "Turkey", "Tuna"], 
        ["Cheese", "Ice Cream", "Milk", "Yogurt"], 
        ["Bread", "Pasta", "Rice", "Quinoa"]]; 

     if ((foodGroup > 1) && ((foodGroup-1) <= foods.length)) { 
      foodsSelect.options.length = 0; 

      // Index was in range, so access our array and create options. 
      for (var i = 0; i < foods[foodGroup - 2].length; i++) { 

       foodsSelect.options[foodsSelect.options.length] = new Option(foods[foodGroup - 2][i], foods[foodGroup - 2][i]); 
      } 

     } 
} 

Вы получите ответ. :)

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