动态填充动态创建的选择框的问题

时间:2016-06-17 10:23:42

标签: javascript jquery

我正在尝试在我的网站上实现这一点。我有一本书清单。它们包括:
1.库克书 2.自动预订
3.裁缝书

现在,对于每本书,我希望用户用价格选择他们想要的页数 对于Cook Book,我有:
A. 100到200页:5美元 B. 200至300页:10美元 C. 300至400页:15美元

对于Auto Book,我有:
A. 100到200页:10美元 B. 200到300页:20美元 C. 300至400页:30美元 D. 400到500页:40美元

对于裁缝书,我有: A. 100到200页:10美元 B. 200至300页:15美元 C. 300至400页:20美元 D. 400到500页:25美元

首先,我不知道这是否是在我的HTML页面上实现此功能的最佳解决方案。欢迎更好的解决方案。

其次,我想到的解决方案是创建一个选择框以列出所有类型的书籍,另一个空的选择框将根据所选书籍填充页数和价格。下面是图像插图的链接。  Link to image illustration

但是,这一次仅限于一本书。我希望用户能够一次选择多本书,所以我添加了一个"添加更多字段"按钮。

当"添加更多字段"单击按钮,它会显示更多已填充了书籍类型的选择框,并在其旁边显示另一个选择框,该选择框应根据所选书籍的选择自动填充。

现在任何动态创建的"书"点击选择框,它应自动填充相应的"页数和价格"选择框。然而,问题在于它并没有停在那里,它还会自动填充所有其他页面" no of page"也选择框。我需要帮助来解决这个问题。见下图。 Link to image description

以下是代码:

        $(document).ready(function(){
            var cookbook = [
                {display: "100 to 200 pages: $5", value: "5" },
                {display: "200 to 300 pages: $10", value: "10" },
                {display: "300 to 400 pages: $15", value: "15" }];

            var autobook = [
                {display: "100 to 200 pages: $10", value: "10" },
                {display: "200 to 300 pages: $20", value: "20" },
                {display: "300 to 400 pages: $30", value: "30" },
                {display: "400 to 500 pages: $40", value: "40" }];

            var tailoringbook = [
                {display: "100 to 200 pages: $10", value: "10" },
                {display: "200 to 300 pages: $15", value: "15" },
                {display: "300 to 400 pages: $20", value: "20" },
                {display: "400 to 500 pages: $25", value: "25" }];

            var parent_selection=$("#parent_selection");
            var child_selection=$("#child_selection");


            $(parent_selection).change(function(){
                var parent_selection_value=$(this).val();

                switch(parent_selection_value){
                    case 'cookbook': list(cookbook);
                    break;
                    case 'autobook': list(autobook);
                    break;
                    case 'tailoringbook': list(tailoringbook);
                    break;
                    default: $(child_selection).html('');
                    break; 
                }
            });

            //function to populate the child select box
            function list(array_list){
                $(child_selection).html("");
                $(array_list).each(function(i){
                    $(child_selection).append("<option value="+array_list[i].value+">"+array_list[i].display+"</option>");
                });
            }


            //Now to add more select boxes dynamically
            var addButton=$("#addButton");
            $(addButton).click(function (){
               $('div').append("<br>Book: <select class='parent_selection1'>"+
                               "<option value=''>--Please select--</option>"+
                                "<option value='cookbook'>Cook Book</option>"+
                               "<option value='autobook'>Auto Book</option>"+
                                "<option value='tailoringbook'>Tailoring Book</option>"+
                                "</select>"+

                                " No of Pages: "+
                                "<select class='child_selection1'>"+
                                "</select>"
                              ); 
            });

            //Now populating the dependent select boxes dynamically
            $(document).on("change", ".parent_selection1", function(){
                 var parent_selection1_value=$(this).val();

                switch(parent_selection1_value){
                    case 'cookbook': list1(cookbook);
                    break;
                    case 'autobook': list1(autobook);
                    break;
                    case 'tailoringbook': list1(tailoringbook);
                    break;
                    default: $(child_selection1).html('');
                    break; 
                }

            });

            //var child_selection1=$(".child_selection1");
            function list1(array_list){
                $(".child_selection1").html("");
                $(array_list).each(function(i){
                    $(".child_selection1").append("<option value="+array_list[i].value+">"+array_list[i].display+"</option>");
                });
            }


        });
    </script>
</head>
<body>
    <div>
        Book:
        <select id="parent_selection">
            <option value="">--Please select--</option>
            <option value="cookbook">Cook Book</option>
            <option value="autobook">Auto Book</option>
            <option value="tailoringbook">Tailoring Book</option>
        </select>

        No of Pages:
        <select id="child_selection">
        </select>
        <input type="button" value="Add more fields" id="addButton"/>
    </div>
</body>

0 个答案:

没有答案