jquery插件-cityselect.js扩展(支持4层联动)

<p>
	省市区联动下拉效果在WEB中应用非常广泛,尤其在一些会员信息系统、电商网站最为常见。开发者一般使用Ajax实现无刷新下拉联动。本文将讲述,扩展的jQuery插件cityselect.js,支持四层的json遍历(jquery的插件支持三层),通过读取JSON数据,实现无刷新动态下拉省市二(三)(四)级联动效果。
</p>
<img src="select.png"/>
<h2>
	
	二:插件参数<br />
</h2>
<table cellpadding="0" cellspacing="0" border="0" width="488">
<tbody>
<tr>
    <td  height="26" width="75">参数名</td>
    <td  width="113">默认值</td>
    <td  width="81">字符类型</td>
    <td  width="68">使用频率</td>
    <td  width="151">释义说明</td>
</tr>
<tr>
    <td height="21">url</td>
    <td>js/city.min.js</td>
    <td>string</td>
    <td><span></span>常用</td>
    <td>省市数据josn文件路径</td>
</tr>
<tr>
    <td height="21">prov</td>
    <td>null</td>
    <td>string</td>
    <td>常用</td>
    <td>默认省份</td>
</tr>
<tr>
    <td height="21">city</td>
    <td>null</td>
    <td>string</td>
    <td>常用</td>
    <td>默认城市</td>
</tr>
<tr>
    <td height="21">dist</td>
    <td>null</td>
    <td>string</td>
    <td>常用</td>
    <td>默认地区(县)</td>
</tr>
<tr>
    <td height="21">street</td>
    <td>null</td>
    <td>boolean</td>
    <td>常用</td>
    <td>街道</td>
</tr>
<tr>
    <td height="21">nodata</td>
    <td>null</td>
    <td>string</td>
    <td>常用</td>
    <td>无数据状态</td>
</tr>
<tr>
    <td height="21">required</td>
    <td>true</td>
    <td>boolean</td>
    <td>常用</td>
    <td>必选项</td>
</tr>
</tbody>
</table>

<h2>
	三:最简使用教程<br />
</h2>

<p>
	HTML代码
</p>
<p>
	1、首先在head中载入jquery库和cityselect插件。
</p>
<pre class="prettyprint lang-js">
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/jquery.cityselect.js"></script>
</pre>
<p>
	2、接下来,我们在#city中,放置三个select,并且三个select分别设置class属性为:prov、city、dist、street,分别表示省、市、区(县)、街道四个下拉框。注意如果只想实现省、市、区(县)三级联动,则去掉第四个street的select即可;如果只想实现省市二级联动,则去掉第三个dist的select和去掉第四个street的select即可。
    加</br>之后样式变成纵列!city.min.js放到<strong> jquery.cityselect.js</strong> 所在的数据库中,千万不要丢失!
</p>
<pre class="prettyprint lang-html">
<div id="city"> 
<select class="prov"></select></br>
<select class="city" disabled="disabled"></select></br>
<select class="dist" disabled="disabled"></select></br>
<select class="street" disabled="disabled"></select>
</div> </pre>
<p>
	3、调用cityselect插件非常简单,直接调用 </p>
<pre class="prettyprint lang-js">
<script type="text/javascript">
    $(function(){
        $("#city").citySelect(); 
    });
</script>
</pre>
<p>	自定义参数调用,设置默认省市区。</p>
<pre class="prettyprint lang-js">
<script type="text/javascript">
   $("#city").citySelect({ 
        url:"js/city.min.js", 
        prov:"湖南", //省份
        city:"长沙", //城市
        dist:"岳麓区", //区县
        nodata:"none" //当子集无数据时,隐藏select
   	}); 
</script>
</pre>
<p>
	当然,你还可以扩展,自定义下拉列表选项数据,你可以根据需要设置下拉内容,注意数据格式一定要为JSON格式。categorySelectStr为后台封装的字符串型json数据,pname、sname、tname、fname为report的属性值。</p>
<pre class="prettyprint lang-js">
<script type="text/javascript">
	$(function(){
	$("#city").citySelect({
		url:{"citylist":${categorySelectStr}},
		prov:"${report.pname}",
		city:"${report.sname}",
		dist:"${report.tname}",
		street:"${report.fname}",
		nodata:"none"
	});
});
</script>
</pre>

<p>
	4、后台封装json的代码,得到4个集合
</p>
<pre class="prettyprint lang-html">
public String getFourCategoryJson() {
	String ret = "";
    String sql = "select t1.* from (select PID ID,'1' PID,'1' lev from T_VP_STAT_NAV_NEW_PID where lev='1' group by PID "
		 union all
		 select SPID ID,PID,'2' lev from T_VP_STAT_NAV_NEW_PID where lev='2' and SPID!='-1' and PID in (SELECT PID from T_VP_STAT_NAV_NEW_PID ) group by 		         SPID,PID 
		 union all 
		 select TPID ID,SPID PID,'3' lev from T_VP_STAT_NAV_NEW_PID where lev='3' and TPID!='-1' and SPID in (SELECT SPID from T_VP_STAT_NAV_NEW_PID ) group          by TPID,SPID 
		 union all 
		 select FPID ID,TPID PID,'4' lev from T_VP_STAT_NAV_NEW_PID where lev='4' and FPID!='-1' and TPID in (SELECT TPID from T_VP_STAT_NAV_NEW_PID ) group          by FPID,TPID) t1 
		 order by t1.lev";
		List<Map<String, Object>> list = query(sql);
		List<String> categoryList = new ArrayList<String>();

		Map<String, List<String>> secondcategoryListMap = new HashMap<String, List<String>>();
		Map<String, List<String>> thirdcategoryListMap = new HashMap<String, List<String>>();
		Map<String, List<String>> fourthcategoryListMap = new HashMap<String, List<String>>();
		for (Map<String, Object> map : list) {
			String id = map.get("ID") + "";
			String lev = map.get("LEV") + "";
			String pid = map.get("PID") + "";
		
			if ("1".equals(lev)) {
				categoryList.add(id);
				secondcategoryListMap.put(id, new ArrayList<String>());
			}
			if ("2".equals(lev)) {
				if (secondcategoryListMap.containsKey(pid)) {
					List<String> tempList = secondcategoryListMap.get(pid);
					tempList.add(id);
					thirdcategoryListMap.put(id, new ArrayList<String>());
				}
			}
			if ("3".equals(lev)) {
				if (thirdcategoryListMap.containsKey(pid)) {
					List<String> tempList = thirdcategoryListMap.get(pid);
					tempList.add(id);
					fourthcategoryListMap.put(id, new ArrayList<String>());
				}
			}
			if ("4".equals(lev)) {
				if (fourthcategoryListMap.containsKey(pid)) {
					List<String> tempList = fourthcategoryListMap.get(pid);
					tempList.add(id);
				}
			}
		}
		ret = ReportUtil.getFourSelectJoson(categoryList, secondcategoryListMap, thirdcategoryListMap, fourthcategoryListMap);
		return ret;
	}
}	
</pre>
<p>
	5、把4个集合封装成json,最后转换为字符串。
</p>
<pre class="prettyprint lang-js">
public static String getFourSelectJoson(List<String> select1List, Map<String, List<String>> select2ListMap,
	        Map<String, List<String>> select3ListMap, Map<String, List<String>> select4ListMap) {

		String ret = "";
		if (select1List != null && select2ListMap != null && select3ListMap != null && select4ListMap != null) {

			List<Map<String, Object>> jsonList = new ArrayList<Map<String, Object>>();
			// 添加类型 "所有" 和汇总
			{
				Map<String, Object> select1Map = new HashMap<String, Object>();
				jsonList.add(select1Map);
				select1Map.put("p", "汇总");
				List<Map<String, Object>> select2List = new ArrayList<Map<String, Object>>();
				select1Map.put("c", select2List);
				Map<String, Object> select2Map = new HashMap<String, Object>();
				select2List.add(select2Map);
				select2Map.put("n", "汇总");
				List<Map<String, Object>> select3List = new ArrayList<Map<String, Object>>();
				select2Map.put("a", select3List);
				Map<String, Object> select3Map = new HashMap<String, Object>();
				select3List.add(select3Map);
				select3Map.put("s", "汇总");
				List<Map<String, Object>> select4List = new ArrayList<Map<String, Object>>();
				select3Map.put("k", select4List);
				Map<String, Object> select4Map = new HashMap<String, Object>();
				select4List.add(select4Map);
				select4Map.put("t", "汇总");

				select1Map = new HashMap<String, Object>();
				jsonList.add(select1Map);
				select1Map.put("p", "所有");
				select2List = new ArrayList<Map<String, Object>>();
				select1Map.put("c", select2List);
				select2Map = new HashMap<String, Object>();
				select2List.add(select2Map);
				select2Map.put("n", "汇总");
				select3List = new ArrayList<Map<String, Object>>();
				select2Map.put("a", select3List);
				select3Map = new HashMap<String, Object>();
				select3List.add(select3Map);
				select3Map.put("s", "汇总");
				select4List = new ArrayList<Map<String, Object>>();
				select3Map.put("k", select4List);
				select4Map = new HashMap<String, Object>();
				select4List.add(select4Map);
				select4Map.put("t", "汇总");

				select2Map = new HashMap<String, Object>();
				select2List.add(select2Map);
				select2Map.put("n", "所有");
				select3List = new ArrayList<Map<String, Object>>();
				select2Map.put("a", select3List);
				select3Map = new HashMap<String, Object>();
				select3List.add(select3Map);
				select3Map.put("s", "汇总");
				select4List = new ArrayList<Map<String, Object>>();
				select3Map.put("k", select4List);
				select4Map = new HashMap<String, Object>();
				select4List.add(select4Map);
				select4Map.put("t", "汇总");

				select3Map = new HashMap<String, Object>();
				select3List.add(select3Map);
				select3Map.put("s", "所有");
				select4List = new ArrayList<Map<String, Object>>();
				select3Map.put("k", select4List);
				select4Map = new HashMap<String, Object>();
				select4List.add(select4Map);
				select4Map.put("t", "汇总");

				select4Map = new HashMap<String, Object>();
				select4List.add(select4Map);
				select4Map.put("t", "所有");

			}
			if (select1List.size() > 0) {
				for (String select1 : select1List) {

					Map<String, Object> select1Map = new HashMap<String, Object>();
					jsonList.add(select1Map);

					select1Map.put("p", select1);
					List<Map<String, Object>> select2List = new ArrayList<Map<String, Object>>();
					select1Map.put("c", select2List);

					{
						Map<String, Object> select2Map = new HashMap<String, Object>();
						select2List.add(select2Map);
						select2Map.put("n", "汇总");
						List<Map<String, Object>> select3List = new ArrayList<Map<String, Object>>();
						select2Map.put("a", select3List);
						Map<String, Object> select3Map = new HashMap<String, Object>();
						select3List.add(select3Map);
						select3Map.put("s", "汇总");
						List<Map<String, Object>> select4List = new ArrayList<Map<String, Object>>();
						select3Map.put("k", select4List);
						Map<String, Object> select4Map = new HashMap<String, Object>();
						select4List.add(select4Map);
						select4Map.put("t", "汇总");

						select2Map = new HashMap<String, Object>();
						select2List.add(select2Map);
						select2Map.put("n", "所有");
						select3List = new ArrayList<Map<String, Object>>();
						select2Map.put("a", select3List);
						select3Map = new HashMap<String, Object>();
						select3List.add(select3Map);
						select3Map.put("s", "汇总");
						select4List = new ArrayList<Map<String, Object>>();
						select3Map.put("k", select4List);
						select4Map = new HashMap<String, Object>();
						select4List.add(select4Map);
						select4Map.put("t", "汇总");

						select3Map = new HashMap<String, Object>();
						select3List.add(select3Map);
						select3Map.put("s", "所有");
						select4List = new ArrayList<Map<String, Object>>();
						select3Map.put("k", select4List);
						select4Map = new HashMap<String, Object>();
						select4List.add(select4Map);
						select4Map.put("t", "汇总");

						select4Map = new HashMap<String, Object>();
						select4List.add(select4Map);
						select4Map.put("t", "所有");

					}

					List<String> select2s = select2ListMap.get(select1);
					for (String select2 : select2s) {

						Map<String, Object> select2Map = new HashMap<String, Object>();
						select2List.add(select2Map);
						select2Map.put("n", select2);
						List<Map<String, Object>> select3List = new ArrayList<Map<String, Object>>();
						select2Map.put("a", select3List);

						{
							Map<String, Object> select3Map = new HashMap<String, Object>();
							select3List.add(select3Map);
							select3Map.put("s", "汇总");
							List<Map<String, Object>> select4List = new ArrayList<Map<String, Object>>();
							select3Map.put("k", select4List);
							Map<String, Object> select4Map = new HashMap<String, Object>();
							select4List.add(select4Map);
							select4Map.put("t", "汇总");

							select3Map = new HashMap<String, Object>();
							select3List.add(select3Map);
							select3Map.put("s", "所有");
							select4List = new ArrayList<Map<String, Object>>();
							select3Map.put("k", select4List);
							select4Map = new HashMap<String, Object>();
							select4List.add(select4Map);
							select4Map.put("t", "汇总");

							select4Map = new HashMap<String, Object>();
							select4List.add(select4Map);
							select4Map.put("t", "所有");

						}

						List<String> select3s = select3ListMap.get(select2);
						for (String select3 : select3s) {
							Map<String, Object> select3Map = new HashMap<String, Object>();
							select3List.add(select3Map);
							select3Map.put("s", select3);
							List<Map<String, Object>> select4List = new ArrayList<Map<String, Object>>();
							select3Map.put("k", select4List);

							{
								Map<String, Object> select4Map = new HashMap<String, Object>();
								select4List.add(select4Map);
								select4Map.put("t", "汇总");

								select4Map = new HashMap<String, Object>();
								select4List.add(select4Map);
								select4Map.put("t", "所有");
							}

							List<String> select4s = select4ListMap.get(select3);
							for (String select4 : select4s) {
								Map<String, Object> select4Map = new HashMap<String, Object>();
								select4List.add(select4Map);
								select4Map.put("t", select4);
							}
						}
					}

				}
			}

			JSONArray jsonObject = JSONArray.fromObject(jsonList);
			ret = jsonObject.toString();
		}
		System.out.println("ret=null");
		return ret;
	}
</pre>
</article>

</div>
</section>
</div>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个错误通常是由于在使用 jQuery TableSorter 插件时出现了问题。根据报错信息,错误发生在 `multisort` 函数的第 638 行,指示无法读取未定义的属性 `'type'`。 我无法提供具体的解决方案,因为我没有你的代码或更多的上下文信息。但是,以下是一些可能的原因和解决方案: 1. 确保正确加载了 jQuery 和 TableSorter 插件。在你的 HTML 文件中,确保先引入 jQuery 库,然后再引入 TableSorter 插件。例如: ```html <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script src="path/to/jquery.tablesorter.js"></script> ``` 2. 检查 jQuery 和 TableSorter 的版本兼容性。确保使用的 TableSorter 插件版本与你的 jQuery 版本兼容。有时,不同版本的插件可能需要特定版本的 jQuery 才能正常工作。你可以查看 TableSorter 插件的文档或官方网站,了解它所需的最低 jQuery 版本。 3. 确保正确初始化 TableSorter 插件。在加载完 TableSorter 插件之后,在你的 JavaScript 代码中使用以下方式初始化 TableSorter: ```javascript $(document).ready(function() { // 选择要应用 TableSorter 的表格,并调用 tablesorter() 方法 $("#your-table-id").tablesorter(); }); ``` 请将上述代码中的 `#your-table-id` 替换为你实际需要应用 TableSorter 插件的表格的 ID 或选择器。 如果以上解决方案都不能解决问题,请提供更多关于你的代码和环境的详细信息,以便我能够更好地帮助你解决这个问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值