ajax实现多级联动菜单,jquery 实现二级/三级/多级联动菜单的思路及代码

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

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

设计此表如下

ID:自增长字段

City_Name:城市名称

City_Code:城市代码

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

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

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

City.ASPX代码为:

复制代码 代码如下:

jQuery + ASP.NET实现三级联动

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

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

省:

市:

区:

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("请选择");

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

jQuery("#" + item).append(jQuery("").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 CityList(string code)

{

List list = new List();

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:

复制代码 代码如下:

///

/// CityLoader 的摘要说明

///

[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 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());

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,我可以为您提供相关的代码实现。 这是一个基于 jQuery三级下拉菜单的例子: HTML 代码: ``` <select id="province"> <option value="">请选择省份</option> </select> <select id="city"> <option value="">请选择城市</option> </select> <select id="area"> <option value="">请选择地区</option> </select> ``` jQuery 代码: ``` $(document).ready(function(){ // 加载省份数据 $.ajax({ type: "GET", url: "省份数据接口地址", dataType: "json", success: function(data){ $.each(data,function(i,item){ $("#province").append("<option value='"+item.code+"'>"+item.name+"</option>"); }); } }); // 当省份选择发生变化时,加载城市数据 $("#province").change(function(){ var provinceCode = $(this).val(); if(provinceCode != ""){ $.ajax({ type: "GET", url: "城市数据接口地址", data: {"provinceCode":provinceCode}, dataType: "json", success: function(data){ $("#city").empty(); $("#area").empty(); $("#city").append("<option value=''>请选择城市</option>"); $.each(data,function(i,item){ $("#city").append("<option value='"+item.code+"'>"+item.name+"</option>"); }); } }); }else{ $("#city").empty(); $("#area").empty(); $("#city").append("<option value=''>请选择城市</option>"); $("#area").append("<option value=''>请选择地区</option>"); } }); // 当城市选择发生变化时,加载地区数据 $("#city").change(function(){ var cityCode = $(this).val(); if(cityCode != ""){ $.ajax({ type: "GET", url: "地区数据接口地址", data: {"cityCode":cityCode}, dataType: "json", success: function(data){ $("#area").empty(); $("#area").append("<option value=''>请选择地区</option>"); $.each(data,function(i,item){ $("#area").append("<option value='"+item.code+"'>"+item.name+"</option>"); }); } }); }else{ $("#area").empty(); $("#area").append("<option value=''>请选择地区</option>"); } }); }); ``` 请注意,以上代码中的数据接口地址需要替换为实际的接口地址。此外,还需要根据实际情况调整代码中的数据格式和名称。 ### 回答2: Ajax级联效果是指利用Ajax技术实现多个下拉菜单之间的数据联实现根据前一个下拉菜单的选项态改变后续下拉菜单的选项内容。Ajax三级下拉菜单效果是指有三个相关联的下拉菜单,选择一个下拉菜单的选项后,另外两个下拉菜单的选项内容会相应改变。 实现这个效果的步骤如下: 1. 前端页面设置三个下拉菜单元素,并使用JavaScript监听第一个下拉菜单的选项改变事件,即当第一个下拉菜单的选项改变时触发事件。 2. 在JavaScript中定义一个Ajax请求函数,该函数通过发送一个Ajax请求到后端获取第二个下拉菜单的选项内容。 3. 后端接收到Ajax请求后,根据第一个下拉菜单选项的值进行相应的数据处理,并将处理结果返回给前端。 4. 前端通过Ajax请求的回调函数获取到后端返回的数据,然后将数据设置为第二个下拉菜单的选项内容。 5. 同样地,对第二个下拉菜单也需要设置一个监听选项改变事件的函数,并在该函数中通过发送Ajax请求获取第三个下拉菜单的选项内容。 6. 后端根据第二个下拉菜单选项的值进行数据处理,并返回给前端。 7. 前端通过回调函数获取到后端返回的数据,并将数据设置为第三个下拉菜单的选项内容。 通过以上步骤,就可以实现Ajax三级下拉菜单效果。在这个过程中,通过Ajax技术实现了前后端的数据交互,从而实现了多级联效果。 ### 回答3: Ajax级联效果指的是在网页中使用Ajax技术实现多个下拉菜单之间的联效果。常见的应用场景是省市区三级选择。 具体操作如下: 1. 在HTML中,定义一个最外层的下拉菜单,用来选择省份。 2. 使用Ajax发送请求,获取省份列表数据,并将数据填充到省份的下拉菜单中。 3. 给省份下拉菜单添加change事件监听器,当省份变化时,触发事件回调函数。 4. 在事件回调函数中,获取选中的省份值,并发送Ajax请求获取对应的城市列表数据。 5. 将获取到的城市列表数据填充到城市的下拉菜单中。 6. 给城市下拉菜单添加change事件监听器,当城市变化时,触发事件回调函数。 7. 在事件回调函数中,获取选中的城市值,并发送Ajax请求获取对应的区县列表数据。 8. 将获取到的区县列表数据填充到区县的下拉菜单中。 9. 完成三级菜单的效果。 通过以上步骤,实现Ajax三级下拉菜单效果,用户可以根据选择的省市区,态获取到对应的下级菜单数据,从而实现级联效果。此种效果在选择地址、商品分类等场景中应用广泛。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值