1 родитель с 2 детьми выпадающий - PullRequest
2 голосов
/ 12 декабря 2008

Я пытаюсь создать 1 родительский выпадающий список, в котором есть 2 зависимых дочерних выпадающих списка с использованием JAVASCRIPT.

Моя HTML-страница находится по адресу - http://www.larkgrove.com/entryform/entryform.html

Я использую динамические списки параметров / зависимые варианты выбора: http://www.javascripttoolbox.com/lib/dynamicoptionlist/examples.php

Если вы заглянете на мой сайт, вы увидите, что я могу заставить списки Дочерних изменять там между ничем и "NULL", но это все, что я могу сделать.

СПАСИБО!

Ответы [ 2 ]

1 голос
/ 12 декабря 2008

Я знаю, что вы используете сценарий динамических параметров, но я подумал, что я бы предложил быстрое решение с нуля. Код немного многословен, но я надеюсь, что будет легче увидеть, что происходит таким образом. Последняя рабочая страница находится здесь: http://ryanscook.com/Files/DropDownListTest.htm

Давайте начнем с предположения, что у вас есть этот HTML:

<select id="parentList" onchange="parentList_OnChange(this)">
    <option>Choose an option</option>
    <option value="A">A</option>
    <option value="B">B</option>
    <option value="C">C</option>
    <option value="D">D</option>
</select>

<select id="childList1"></select>
<select id="childList2"></select>

Вы заметите, что у нас есть обработчик onchange, вот java-скрипт:

// Data for child list 1, this is a of the parent value to one or more options
var childList1Data = {
    "A": ["ChildList1 - A1", "ChildList1 - A2", "ChildList1 - A3"],
    "B": ["ChildList1 - B1"],
    "C": ["ChildList1 - C1", "ChildList1 - C2"],
    "D": ["ChildList1 - D1", "ChildList1 - D2"]
};


// Data for child list 2, this is a of the parent value to one or more options
var childList2Data = {
    "A": ["ChildList2 - A1", "ChildList2 - A2"],
    "B": ["ChildList2 - B1", "ChildList2 - B2", "ChildList2 - B3"],
    "C": ["ChildList2 - C1", "ChildList2 - C2"],
    "D": ["ChildList2 - D1"]
};


// onchange is called when the parent value is changed
function parentList_OnChange(objParentList) {
    var child1 = document.getElementById("childList1");
    var child2 = document.getElementById("childList2");

    // Remove all options from both child lists
    removeOptions(child1);
    removeOptions(child2);

    // Lookup and get the array of values for child list 1, using the parents selected value
    var child1Data = childList1Data[objParentList.options[objParentList.selectedIndex].value];

    // Add the options to child list 1
    if (child1Data) {
        for (var i = 0; i < child1Data.length; i++) {
            child1.options[i] = new Option(child1Data[i], child1Data[i]);
        }
    }


    // Do the same for the second list
    var child2Data = childList2Data[objParentList.options[objParentList.selectedIndex].value];

    if (child2Data) {
        for (var i = 0; i < child2Data.length; i++) {
            child2.options[i] = new Option(child2Data[i], child2Data[i]);
        }
    }
}


function removeOptions(objSelect) {
    while (objSelect.options.length > 0)
        objSelect.options[0] = null;
}

Надеюсь, это поможет и не так уж далеко от вашего вопроса.

0 голосов
/ 12 декабря 2008

Ну, во-первых, давайте посмотрим на ваш код:

<script type="text/javascript">
var TESTLIST = new DynamicOptionList("PARENT1","CHILD1","CHILD2");
TESTLIST.forValue("A").forValue("A").forValue("A").addOptionsTextValue("C","C","D","D");
</script>
<select name="PARENT1">
    <option value="A">A</option>
    <option value="B">B</option>
</select>
<br /><br />
<select name="CHILD1"><script type="text/javascript">TESTLIST.printOptions("CHILD1")</script></select>
<br /><br />
<select name="CHILD2"><script type="text/javascript">TESTLIST.printOptions("CHILD2")</script></select>

Я не думаю, что это делает то, что вы намереваетесь сделать, особенно это:

TESTLIST.forValue("A").forValue("A").forValue("A").addOptionsTextValue("C","C","D","D");

Видите, как вы называете .forvalue ("A") несколько раз излишне? Если вы посмотрите на пример кода, вы увидите:

regionState.forValue("west").addOptions("California","Washington","Oregon");

Я бы попробовал что-то более похожее на это:

TESTLIST.forValue("A").addOptionsTextValue("C","D");
TESTLIST.forValue("B").addOptionsTextValue("E","F");
...