关于动态创建select select个数不确定

w87875251l 2013-01-23 11:14:05
是一个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 () {
//绑定函数继续生成下拉框
});
}
});


如何循环,没有思路了
...全文
194 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
bbjbepzz 2013-01-23
  • 打赏
  • 举报
回复

$("#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);
	}
}
未知数 2013-01-23
  • 打赏
  • 举报
回复
递归调用就可以了

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);
});
fzfei2 2013-01-23
  • 打赏
  • 举报
回复

 $("#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 () {
                        //绑定函数继续生成下拉框
                    });
                }
            });
jsgysyd 2013-01-23
  • 打赏
  • 举报
回复
给你一个全套的无限极的选择菜单 包括 取值: 取层级值,取最后选项的值 设定值 : 层级设置,设置唯一的值(自动寻找)

<!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>
w87875251l 2013-01-23
  • 打赏
  • 举报
回复
我写的有问题 [ 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前没清空

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧