`

自关联jquery无限级联下拉列表

 
阅读更多

本级联适用于:pid自关联数据结构,顶级的pid为0,子级的pid为父级的id.

 

/**
 * 功能描述:<br>
 * 城市级联js
 * @author gyx
 */
$(document).ready(function() {
	//========初始化分类========
	console.log("init...");
	var url="/community/getCountrys/";
	
	// --------全局默认显示-------
	// 默认格式 '{0}' 为自定义方法,用于替换指定字符串
	var defFmt = "<option value=\'-1\'>={0}=</option>";
	// 可设置某些ID的默认显示文本
	var nameMapping = {
			"defTxt"	:defFmt.format('请选择'),      // 默认选项
			"province"	:defFmt.format('省级区划'),    // 可选
			"city"		:defFmt.format('市级区划'),    // 可选
			"region"	:defFmt.format('区、县级区划'),// 可选
			"street"	:defFmt.format('街道'),        // 可选
			"community"	:defFmt.format('社区')         // 可选
	};
	
	// 定义初始化时自动加载的第一个下拉列表的ID
	var frist = $("#province");
	// 初始查询ID = 0
	if(frist.val()==0){
		callCountry(true, frist);
	}
	
	//=====================
	// province	city region	street
	// 切换省市区,绑定所有指定class的下拉列表change事件
	$("select[class='ocountry']").change(function() {
		callCountry(false, this);
	});
	
	
	/**
	 * 调用数据接口
	 * @param top 是否为顶级列表(初始化使用,用户控制数据是填充本元素还是子元素)
	 * @param obj 当前元素
	 */
	function callCountry(top, obj){
		var pid = $(obj).val();
		var nextId = $(obj).attr("next");
		if(pid !="" && pid != -1){
			$.post(url+pid, function(data){
				// 列表项填充
				setNode(top, obj, data.data, nextId);
			}, "json"); 
		}else{
			// 选中默认值重置所有子节点
			cleanNext(nextId);
		}
	}
	
	
	/**
	 * 填充当前节点并设置子节点
	 * @param top		是否为顶级列表
	 * @param obj		当前操作对象
	 * @param data		数据列表json返回
	 * @param nextId	下级元素ID
	 */
	function setNode(top, obj, data, nextId){
		var id = "";
		if(top){
			id = $(obj).attr("id");
		}else{
			id = nextId;
		}	
		$("#"+id).empty();// 移除子节点
		var defText = nameMapping[id];
		if(defText==undefined){
			defText = nameMapping.defTxt;
		}
		$(defText).appendTo("#"+id);   //添加一个默认项
		cleanNext(nextId); // 清空下级列表
		
		$.each(data, function(key, val) {
			// 将返回来的项添加到下拉菜单中
			$("<option value=\""+val.id+"\">"+val.name+"</option>").appendTo("#"+id);
		});
	}
	
	/**
	 * 重置下级列表为默认值
	 */
	function cleanNext(nextId){
		while (nextId!="" && nextId!=undefined){
			$("#"+nextId).empty();// 移除子节点
			var defText = nameMapping[nextId];
			if(defText==undefined){
				defText = nameMapping.defTxt;
			}
			$(defText).appendTo("#"+nextId);
			nextId = $("#"+nextId).attr("next");
		}
	}
});


/** 格式化输入字符串**/
//用法: "hello{0}".format('world');返回'hello world'
String.prototype.format= function(){
  var args = arguments;
  return this.replace(/\{(\d+)\}/g,
  		function(s,i){
  			return args[i];
  		});
};

 

html:

需设置class为 'ocountry' 拦截change事件,并设置本级id与下一级的id属性

 

<select class='ocountry' id="province" next="city">
	<option value="0">=请选择=</option>
</select>
<select class='ocountry' id="city" next="region">
	<option value="-1">=请选择=</option>
</select>
<select class='ocountry' id="region" next="street">
	<option value="-1">=请选择=</option>
</select>
<select class='ocountry' id="street" next="community">
	<option value="-1">=请选择=</option>
</select>
<select class='ocountry' id="community" name="communityId">
	<option value="-1">=请选择=</option>
</select>

 

分享到:
评论

相关推荐

    c#.net无限级联下拉菜单

    级联下拉菜单是指一个下拉列表的选择会影响另一个下拉列表的选项,形成一种联动的效果。无限级联则意味着这种联动可以无限制地深入到多个级别,用户可以根据选择逐级展开下拉菜单,获取更精确的信息。 在C#.NET中,...

    水平无限级分类下拉式导航菜单

    3. JavaScript 或 jQuery:实现动态交互,监听鼠标事件,控制下拉菜单的显示与隐藏,以及处理无限级分类的逻辑。 三、关键代码实现 1. HTML 骨架: ```html &lt;li&gt;&lt;a href="#"&gt;菜单1 &lt;li&gt;&lt;a href="#"&gt;子菜单1-1...

    jquery无限级级联

    总的来说,jQuery无限级联利用了Ajax的异步特性和jQuery的DOM操作能力,实现了在Web页面上动态生成和更新下拉列表,提供了一种优雅的方式来处理多级关联数据的展示和交互。在实际应用中,这种技术可以广泛应用于各种...

    ASP.NET源码——简单无限级分类(表格、下拉列表)源码.zip

    对于下拉列表,可能需要编写JavaScript或jQuery代码,动态加载并渲染下拉选项。 5. 页面交互:用户在前端选择某一分类后,可能需要通过AJAX更新表格,显示该分类的子级信息。这涉及到JavaScript事件监听和异步请求...

    无限级分类,dropdownlist分类

    无限级分类可以通过递归算法实现,例如自关联查询,在数据库层面则可能使用自引用表来存储。 接下来,"表格分类"是指将无限级分类以表格的形式展示,通常用于后台管理系统,便于管理员查看和管理。表格分类可能包含...

    DropDownList无限级分类

    2. **JavaScript/jQuery**:JavaScript或jQuery库可以帮助我们动态地创建和操作DOM元素,实现下拉列表的无限级展开和收缩。例如,可以使用递归函数来构建层级结构,并通过事件监听来处理用户的选择。 3. **AJAX**:...

    AJAX+ASP多级无限制级联菜单(地市版).

    2. **JavaScript事件监听**:使用JavaScript(可能结合jQuery等库)监听下拉列表的change事件,当用户做出选择时触发AJAX请求。 3. **AJAX请求**:构造AJAX请求,向服务器发送用户选择的值,并请求下一级菜单的数据...

    jquery插件 autoComboBox 下拉框

    这种插件通常在需要动态关联的下拉列表中,如省市区选择、产品分类或部门选择等场景中使用。 描述中提到,开发者在实现联动下拉框时可能会面临重复工作的问题,无论是使用ajaxpro.dll还是jQuery的AJAX方法。文章...

    强烈推荐教程:ajax实现省市县区和详细地址多级联动视频教程(无限级分类)

    2. 多级联动:这是一种常见的前端交互设计,通常用于下拉选择框,当用户选择某一选项时,其他相关联的选择框会根据预设的关联关系动态加载新的选项。在本案例中,省市县区的联动,意味着当用户选择一个省,对应的市...

    无限极分类

    6. **无限级下拉菜单**:在前端展示时,无限级分类常被用于创建下拉菜单。手风琴效果则是一种交互设计,使得展开/折叠分类更加直观。在HTML和JavaScript中,可以使用jQuery的`.slideToggle()`等方法实现。 7. **...

Global site tag (gtag.js) - Google Analytics