手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >jquery 实现二级/三级/多级联动菜单的思路及代码
jquery 实现二级/三级/多级联动菜单的思路及代码
摘要:本文介绍使用jQuery的AJAX功能和asp.net来实现省市区的三级联动效果,其他二级、三级或多级联动也可以按照此方法完成。文章中涉及到...

本文介绍使用jQuery的AJAX功能和asp.net来实现省市区的三级联动效果,其他二级、三级或多级联动也可以按照此方法完成。

文章中涉及到的数据表为City,为方便管理。

设计此表如下

ID:自增长字段

City_Name:城市名称

City_Code:城市代码

我们根据城市代码来查询省、市、区。城市代码结构大致如下:

内蒙古:150000,呼和浩特:150100,新城区:150101。

其他地区代码与此一样,省级为省级编号+0000,市级为省级编号+市级编号+00,地区为省级编号+市级编号+地区编号。

City.ASPX代码为:

复制代码 代码如下:

<!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 runat="server">

<title>jQuery + ASP.NET实现三级联动</title>

<script src="http://www.jb51.netScripts/jquery-1.4.1.min.js" type="text/javascript"></script>

<style type="text/css">

#dpCity{ display:none; position:relative;}

#dpArea{ display:none;position:relative;}

</style>

</head>

<body>

<div>

省:<asp:DropDownList ID="dpProvince" runat="server"></asp:DropDownList>

市:<asp:DropDownList ID="dpCity" runat="server"></asp:DropDownList>

区:<asp:DropDownList ID="dpArea" runat="server"></asp:DropDownList>

</div>

</body>

</html>

JS代码:

复制代码 代码如下:

jQuery(document).ready(function () {

var dp1 = jQuery("#dpProvince");

var dp2 = jQuery("#dpCity");

var dp3 = jQuery("#dpArea");

//填充省的数据

loadAreas("", "dpProvince");

//给省绑定事件,触发事件后填充市的数据

jQuery(dp1).bind("change keyup", function () {

var provinceID = dp1.attr("value");

loadAreas(provinceID, "dpCity");

dp2.fadeIn("slow");

});

//给市绑定事件,触发事件后填充区的数据

jQuery(dp2).bind("change keyup", function () {

var cityID = dp2.attr("value");

loadAreas(cityID, "dpArea");

dp3.fadeIn("slow");

});

});

function loadAreas(val, item) {

jQuery.ajax({

type: "post",

url: "CityLoader.asmx/GetCityList",

data: {

code: val,

a: Math.random()

},

error: function () {

return false;

},

success: function (data) {

var i;

var json = eval(data);

jQuery("#" + item).append("<option value='' selected='selected'>请选择</option>");

for (i = 0; i < json.length; i++) {

jQuery("#" + item).append(jQuery("<option></option>").val(json[i].c_code).html(json[i].c_name));

};

}

});

}

后台代码:

复制代码 代码如下:

//实例类

public class CityModel

{

int _id;

string _cityname;

string _citycode;

public int ID

{

set { _id = value; }

get { return _id; }

}

public string CityName

{

set { _cityname = value; }

get { return _cityname; }

}

public string CityCode

{

set { _citycode = value; }

get { return _citycode; }

}

}

//DAL层,返回DataTable,使用通用SqlHelper

public DataTable CityList(string pcode)

{

string SQL = "SELECT * FROM city WHERE 1=1";

if (!string.IsNullOrEmpty(pcode))

{

if (pcode.Substring(2, 2) != "00")

{

SQL = SQL + " AND RIGHT(citycode,2)<>'00' AND LEFT(citycode,4)=LEFT(@pcode,4)";

}

else

{

SQL = SQL + " AND RIGHT(citycode,2)='00' AND LEFT(RIGHT(citycode,4),2)<>'00' AND LEFT(citycode,2)=LEFT(@pcode,2)";

}

}

else

{

SQL = SQL + " AND LEFT(citycode,2)<>'00' AND RIGHT(citycode,4)='0000'";

}

SQL = SQL + " ORDER BY sorts ASC";

SqlParameter[] Param ={

new SqlParameter("@pcode",pcode)

};

using (SqlConnection conn = new SqlConnection(DBUtility.SqlHelper.ConnectionStringLocalTransaction))

{

DataSet ds = DBUtility.SqlHelper.ExecuteDataSet(conn, CommandType.Text, SQL, Param);

return ds.Tables[0];

}

}

//BLL层,返回City的泛型列表

public List<CityModel> CityList(string code)

{

List<CityModel> list = new List<CityModel>();

DAL. CityDAL cd = new DAL.CityDAL();

DataTable dt = cd.CityList(code);

if (dt.Rows.Count > 0)

{

for (int i = 0; i < dt.Rows.Count; i++)

{

CityModel cm = new CityModel();

cm.ID = int.Parse(dt.Rows[i]["id"].ToString());

cm.CityName = dt.Rows[i]["cityname"].ToString();

cm.CityCode = dt.Rows[i]["citycode"].ToString();

list.Add(cm);

}

}

return list;

}

CityLoader.asmx:

复制代码 代码如下:

/// <summary>

/// CityLoader 的摘要说明

/// </summary>

[WebService(Namespace = "http://tempuri.org/")]

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

[System.ComponentModel.ToolboxItem(false)]

// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。

// [System.Web.Script.Services.ScriptService]

public class CityLoader : System.Web.Services.WebService

{

[WebMethod]

public void GetCityList(string code)

{

CityBLL cb = new CityBLL();

StringBuilder sb = new StringBuilder();

List<CityModel> cm = cb.CityList(code);

sb.Append("[");

if (cm.Count > 0)

{

for (int i = 0; i < cm.Count; i++)

{

CityModel model = cm[i];

sb.Append("{");

sb.AppendFormat(@"""c_name"":""{0}"",", model.CityName);

sb.AppendFormat(@"""c_code"":""{0}""", model.CityCode);

sb.Append("}");

if (i < cm.Count - 1)

{

sb.Append(",");

}

}

}

sb.Append("]");

System.Web.HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");

System.Web.HttpContext.Current.Response.Write(sb.ToString());

}

}

【jquery 实现二级/三级/多级联动菜单的思路及代码】相关文章:

jQuery实现不断闪烁文字的方法

jQuery实现div随意拖动的实例代码(通用代码)

jQuery插件jRumble实现网页元素抖动

javascript实现简单的进度条

一些很实用且必用的小脚本代码第1/5页

jquery实现弹出层效果实例

jQuery实现表格行上移下移和置顶的方法

JavaScript实现仿网易通行证表单验证

用JavaScript实现页面重定向功能的教程

jQuery实现表格行上下移动和置顶效果

精品推荐
分类导航