是一个CMS系统, 会有很多层栏目,我要根据现有第一层 动态生成select 即第二层栏目,第二个select bind("change", 生成select函数) 这样循环, 直到没有下级栏目为止
<select id="ddl1" name="ddl1">
            </select> $("#ddl1").change(function () {
                var columnId = $("#ddl1 option:selected").val();
                var json = GetData(columnId);
                json = strToObj(json);                if (typeof (json) == "number") {                }
                else {
                    var sel = $("<select><option value='-1'>请选择</option></select>");
                    $.each(json, function (i, o) {
                        sel.append("<option value=" + o.Id + ">" + o.Name + "</option>");
                    });
                    $("#divSel").append(sel);
                    sel.bind("change", function () {
                        //绑定函数继续生成下拉框
                    });
                }
            });如何循环,没有思路了

解决方案 »

  1.   


     $("#ddl1").change(function () {
                    var columnId = $("#ddl1 option:selected").val();
                    var json = GetData(columnId);
                    json = strToObj(json);
     
                    if (typeof (json) == "number") {
     
                    }
                    else {
                        //这里你最好加个识别是那个层的 ,同一层次的不要重建 
                        var sel = $("<select id=""><option value='-1'>请选择</option></select>");  
                         
                        $.each(json, function (i, o) {
                            sel[0].options.add(  new Option( o.Name, o.Id) );
                            
                        });
                        $("#divSel").append(sel);
                        sel.bind("change", function () {
                            //绑定函数继续生成下拉框
                        });
                    }
                });
      

  2.   

    递归调用就可以了
    function addSel(columnId){
                    var json = GetData(columnId);
                    json = strToObj(json);
         if (typeof (json) == "number") {
           return;
                    }
                    else {
                        var sel = $("<select><option value='-1'>请选择</option></select>");
                        $.each(json, function (i, o) {
                            var opn = $("<option value=" + o.Id + ">" + o.Name + "</option>");
                            sel.append(opn);
                        });
                        $("#divSel").append(sel);
                        sel.bind("change", function () {
                            var opn = $(this).find('option:selected');
                            var childId= opn.val();
                            if(!childId) return;
                            addSel(childId);
                        });
                    }}$("#ddl1").change(function(){
        var columnId = $("#ddl1 option:selected").val();
        addSel(columnId);
    });
      

  3.   


    $("#ddl1").change(callback);
    function callback() {
        //获取选中的值
    var columnId = $(this).val();
    var json = GetData(columnId);
    json = strToObj(json); 
    if (typeof (json) == "number") { 
    }
    else {
    var sel = $("<select><option value='-1'>请选择</option></select>");
    $.each(json, function (i, o) {
    sel.append("<option value=" + o.Id + ">" + o.Name + "</option>");
    });
    $("#divSel").append(sel);
    sel.change(callback);
    }
    }
      

  4.   

    我写的有问题 [
    code=javascript]
     $("#ddl1").change(function () {                 var columnId = $("#ddl1 option:selected").val();                 var json = GetData(columnId);                 json = strToObj(json);                   if (typeof (json) == "number") {                   }                 else {                     var sel = $("<select><option value='-1'>请选择</option></select>");                     $.each(json, function (i, o) {                         sel.append("<option value=" + o.Id + ">" + o.Name + "</option>");                     });                     $("#divSel").append(sel);                     sel.bind("change", function () {                         //绑定函数继续生成下拉框                     });                 }             }); [/code]动态创建select前没清空 
      

  5.   

    给你一个全套的无限极的选择菜单
    包括 取值:
               取层级值,取最后选项的值
         设定值 :
               层级设置,设置唯一的值(自动寻找)
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js" type="text/javascript"></script>
        <script type="text/javascript">
            $.fn.extend({
                TreeSelect: function (Properties) {
                    var Settings = {
                        DataSource: [
                            { name: "group1", code: "group1", data: [{ name: "city1_1", code: "city1_1" }, { name: "city1_2", code: "city1_2" }, { name: "city1_3", code: "city1_3"}] }
                            , { name: "group2", code: "group2", data: [{ name: "city2_1", code: "city2_1" }, { name: "city2_2", code: "city2_2", data: [{ name: "city2_2_1", code: "city2_2_1" }, { name: "city2_2_2", code: "city2_2_2" }, { name: "city2_2_3", code: "city2_2_3"}] }, { name: "city2_3", code: "city2_3"}] }
                            , { name: "group3", code: "group3", data: [{ name: "city3_1", code: "city3_1" }, { name: "city3_2", code: "city3_2" }, { name: "city3_3", code: "city3_3"}] }
                        ]                             //树形Json对象
                        , TextFieldName: "name"       //对象中显示在Text中的属性名称
                        , ValueFieldName: "code"      //对象中显示在Value中的属性名称
                        , ChildFieldName: "data"      //对象中表示自己菜单的属性名称
                        , FirstText: null             //选择控件中是否加载一个指定的空项 比如说(全部)
                    };
                    $.extend(Settings, Properties);                var SelectorJQ = $(this);
                    SelectorJQ.each(function () {
                        var ControlData = $(this).data("ControlData");
                        if (ControlData == undefined) {
                            var ControlData = {
                                ControlJQs: {}
                                , Settings: Settings
                            };
                            ControlData.ControlJQs.TreeSelectJS = this;
                            ControlData.ControlJQs.TreeSelectJQ = $(ControlData.ControlJQs.TreeSelectJS).data("ControlData", ControlData).data("EntityList", ControlData.Settings.DataSource);                        var ChangeFunction = function (e) {
                                var thisJQ = $(e.currentTarget);
                                var EntityList;
                                if (thisJQ[0] == ControlData.ControlJQs.TreeSelectJQ[0]) {
                                    ControlData.ControlJQs.TreeSelectJQ.empty();
                                    EntityList = thisJQ.data("EntityList");
                                } else {
                                    thisJQ.nextAll().remove();
                                    var optionJQ = $("option:selected", thisJQ);
                                    var Entity = optionJQ.data("Entity");
                                    if (Entity != undefined) {
                                        EntityList = Entity[ControlData.Settings.ChildFieldName];
                                    };
                                };                            if (EntityList != undefined && EntityList.length > 0) {
                                    var SelectJQ = $("<select></select>").appendTo(ControlData.ControlJQs.TreeSelectJQ).bind("change", ChangeFunction);
                                    if (ControlData.Settings.FirstText != null) {
                                        $("<option value=\"\">" + ControlData.Settings.FirstText + "</option>").appendTo(SelectJQ);
                                    };
                                    for (var j = 0; j < EntityList.length; j++) {
                                        var Entity = EntityList[j];
                                        $("<option value=\"" + Entity[ControlData.Settings.ValueFieldName] + "\">" + Entity[ControlData.Settings.TextFieldName] + "</option>").data("Entity", Entity).appendTo(SelectJQ);
                                    };
                                    SelectJQ.change();
                                };
                            };
                            ChangeFunction({ currentTarget: ControlData.ControlJQs.TreeSelectJS });
                        };
                    });
                    return this;
                }
                , TreeSelectGetValue: function () {
                    var SelectorJQ = $(this);
                    var optionJQ = $("option:selected", SelectorJQ);
                    var EntityList = [];
                    optionJQ.each(function () {
                        EntityList.push($(this).data("Entity"));
                    });
                    return EntityList;
                }
                , TreeSelectGetLastValue: function () {
                    var EntityList = $(this).TreeSelectGetValue();
                    var Entity = null;
                    if (EntityList != undefined && EntityList.length > 0) {
                        Entity = EntityList[EntityList.length - 1];
                    };
                    return Entity;
                }
                , TreeSelectSetValue: function (Value) {
                    var SelectorJQ = $(this);
                    if (Object.prototype.toString.apply(Value) == "[object Array]") {
                        for (var i = 0; i < Value.length; i++) {
                            $("select:eq(" + i + ")", SelectorJQ).val(Value[i]).change();
                        };
                    } else {
                        var ControlData = SelectorJQ.data("ControlData");
                        if (ControlData != undefined) {
                            Value = Value.toString();
                            var ValueArray = [];
                            var IsFind = false;
                            var SelectValue = function (EntityList, Level) {
                                if (EntityList != undefined && EntityList.length > 0) {
                                    for (var i = 0; i < EntityList.length; i++) {
                                        var Entity = EntityList[i];
                                        var V = Entity[ControlData.Settings.ValueFieldName];
                                        if (!IsFind) {
                                            ValueArray[Level] = V;
                                        };
                                        if (V == Value) {
                                            IsFind = true;
                                            ValueArray.splice(Level + 1, ValueArray.length - Level - 1);
                                            break;
                                        } else {
                                            SelectValue(Entity[ControlData.Settings.ChildFieldName], (Level + 1));
                                        };
                                    };
                                };
                            };
                            SelectValue(ControlData.Settings.DataSource, 0);
                            SelectorJQ.TreeSelectSetValue(ValueArray);
                        };
                    };
                }
            });        function buttonTreeGetSelectValue_onclick() {
                var EntityList = $("#divTreeSelect").TreeSelectGetValue();
                var Html = "";
                for (var i = 0; i < EntityList.length; i++) {
                    var Entity = EntityList[i];
                    Html += ">>" + Entity.name + "(" + Entity.code + ")";
                };
                $("#divTreeSelectValue").html(Html);
            };        function buttonTreeSelectGetLastValue_onclick() {
                var Entity = $("#divTreeSelect").TreeSelectGetLastValue();
                var Html = Entity.name + "(" + Entity.code + ")";
                $("#divTreeSelectValue").html(Html);
            };        function buttonTreeSelectSetValue_onclick() {
                var ValueArray = ["group2", "city2_2", "city2_2_2"];
                $("#divTreeSelect").TreeSelectSetValue(ValueArray);
            };        function buttonTreeSelectSetLastValue_onclick() {
                var Value = "city2_2_2";
                //Value = "group3";
                $("#divTreeSelect").TreeSelectSetValue(Value);
            };
            $(function () {
                $("#divTreeSelect").TreeSelect({
                    DataSource: [
                        { name: "group1", code: "group1", data: [{ name: "city1_1", code: "city1_1" }, { name: "city1_2", code: "city1_2" }, { name: "city1_3", code: "city1_3"}] }
                        , { name: "group2", code: "group2", data: [{ name: "city2_1", code: "city2_1" }, { name: "city2_2", code: "city2_2", data: [{ name: "city2_2_1", code: "city2_2_1" }, { name: "city2_2_2", code: "city2_2_2" }, { name: "city2_2_3", code: "city2_2_3"}] }, { name: "city2_3", code: "city2_3"}] }
                        , { name: "group3", code: "group3", data: [{ name: "city3_1", code: "city3_1" }, { name: "city3_2", code: "city3_2" }, { name: "city3_3", code: "city3_3"}] }
                    ]                                      //树形Json对象
                    , TextFieldName: "name"                //对象中显示在Text中的属性名称
                    , ValueFieldName: "code"               //对象中显示在Value中的属性名称
                    , ChildFieldName: "data"               //对象中表示自己菜单的属性名称
                    , FirstText: "--请选择--"              //选择控件中是否加载一个指定的空项 比如说(全部)
                });        });
        </script>
    </head>
    <body>
        <div id="divTreeSelect">
        </div>
        <input id="buttonTreeGetSelectValue" type="button" value="获取层级值" onclick="return buttonTreeGetSelectValue_onclick()" />
        <input id="buttonTreeSelectGetLastValue" type="button" value="获取最后值" onclick="return buttonTreeSelectGetLastValue_onclick()" />
        <input id="buttonTreeSelectSetValue" type="button" value="设置层级值" onclick="return buttonTreeSelectSetValue_onclick()" />
        <input id="buttonTreeSelectSetLastValue" type="button" value="设置最后值" onclick="return buttonTreeSelectSetLastValue_onclick()" />
        <div id="divTreeSelectValue">
        </div>
    </body>
    </html>