ajax实现三级联动菜单代码

类似的三级绑定,但在修改信息的时候,绑定然后再提交,下拉框的值总会消失,或者就是回传以后,下拉框的值也会消失,这两天又遇到同样的问题,所以下决心把这个彻底搞定。

本实例用的是jquery+ashx实现。

第一种情况,只有提交的情况

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Area.asp教程x.cs" Inherits="Area" %>

<!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>无标题页</title>
    <script type="text/网页特效" src="js/jquery.min.js"></script>
    <script type="text/javascript">
       $(document).ready(function(){
          doChange(null,"province","0");
       });
       function doChange(id,sub_id,id_value)
       {
          $("#"+sub_id).empty();
          var p_id=id_value;
          if(id!=null)
          {
             p_id=$("#" + id).val();
          }
          var options="<option value="">请选择</option>";
          if(p_id!="")
          {
              $.getJSON("GetArea.ashx",{pid:p_id},function(data){
                 $.each(data.items,function(i,item){
                    options += "<option value="" + item.value + "">" + item.text + "</option>";
                 });
                 $("#" + sub_id).append(options);
              });
          }
          else
          {
             $("#" + sub_id).append(options);
          }
       }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <select name="province" id="province" onchange="doChange('province','city','0','')"></select>省
    <select name="city" id="city" onchange="doChange('city','area','0','')"></select>市
    <select name="area" id="area"></select>县
    </div>
    </form>
</body>
</html>

三个select分别用于显示省,市,县

以下是GetArea.ashx代码

<%@ WebHandler Language="C#" Class="GetArea" %>

using System;
using System.Web;
using System.Data;
using GeodonHelper;

public class GetArea : IHttpHandler {
   
    public void ProcessRequest (HttpContext context) {
        string startValue = "{"items":[";
        string endValue = "]}";
        if (context.Request.QueryString["pid"] == null || !ValidateHelper.IsInteger(context.Request.QueryString["pid"].ToString()))
        {
            context.Response.Write(startValue + "{value:"",text:"参数错误"}" + endValue);
            context.Response.End();
        }
        else
        {
            int pid = int.Parse(context.Request.QueryString["pid"].ToString());

            string middleValue = "";
            //DBHelper是我自己写的数据库教程操作类库,目前支持MSSQL MySql,Access,SQlite,此处的代码可以换成你自己的数据库操作代码。

            DBHelper sh = DBHelper.CreateInstance();

            string sql = "select Id,AreaName from Area where ParentId=@pid";
            sh.Params.Add("@pid", pid);
            DataTable tb = sh.ExecuteDataTable(sql);
            int count = tb.Rows.Count;
            if (count == 0)
            {
                context.Response.Write(startValue + "{value:"",text:"没有数据"}" + endValue);
                context.Response.End();
            }
            else
            {
                for (int i = 0; i < count; i++)
                {
                    middleValue += ",{value:"" + tb.Rows[i]["Id"].ToString().Trim() + "",text:"" + tb.Rows[i]["AreaName"].ToString().Trim() + ""}";
                }

                middleValue = middleValue.Substring(1);
                context.Response.Write(startValue + middleValue + endValue);
                context.Response.End();
            }
        }
    }
 
    public bool IsReusable {
        get {
            return true;
        }
    }

}

 

提交数据的时候用Request["province"],Request["city"],Request["area"]

第二种情况:修改信息先从数据库获取省市县编号,然后绑定三个select,然后再提交数据.

aspx页面

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Edit.aspx.cs" Inherits="Edit" %>

<!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>无标题页</title>
    <script type="text/javascript" src="js/jquery.min.js"></script>
    <script type="text/javascript">
       $(document).ready(function(){
          GetProvince();
       });
       function GetProvince()
       {
          var province=$("#province");
          province.empty();
          var options="<option value="">请选择</option>";
          $.getJSON("GetArea.ashx",{pid:"0"},function(data){
             $.each(data.items,function(i,item){
                options += "<option value="" + item.value + "">" + item.text + "</option>";
             });
             province.append(options);
             province.val("<%=province %>");
             GetCity();
          });
       }
       function GetCity()
       {
          var city=$("#city");
          city.empty();
          var p_id=$("#province").val();
          var options="<option value="">请选择</option>";
          if(p_id!="")
          {
              $.getJSON("GetArea.ashx",{pid:p_id},function(data){
                 $.each(data.items,function(i,item){
                    options += "<option value="" + item.value + "">" + item.text + "</option>";
                 });
                 city.append(options);
                 city.val("<%=city %>");
                 GetArea();
              });
          }
          else
          {
             city.append(options);
             GetArea();
          }
         
       }
       function GetArea()
       {
          var area=$("#area");
          area.empty();
          var p_id=$("#city").val();
          var options="<option value="">请选择</option>";
          if(p_id!="" && p_id!=null)
          {
              $.getJSON("GetArea.ashx",{pid:p_id},function(data){
                 $.each(data.items,function(i,item){
                    options += "<option value="" + item.value + "">" + item.text + "</option>";
                 });
                 area.append(options);
                 area.val("<%=area %>");
              });
          }
          else
          {
             area.append(options);
          }
       }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <select name="province" id="province" onchange="GetCity()"></select>省
    <select name="city" id="city" onchange="GetArea()"></select>市
    <select name="area" id="area"></select>县
    </div>
    <asp:Button ID="btn_submit" runat="server" Text="提交表单"
        onclick="btn_submit_Click" /> http://www.111cn.net
    <br />
    <asp:Label ID="lbl_msg" runat="server"></asp:Label>
    </form>
</body>
</html>

 

因为要为每个select赋值,而这个赋值又只能在ajax加载成功之后进行,所以我采取的办法是写三个方法,分别用于加载省,市,县

下面是aspx.cs代码

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using GeodonHelper;

public partial class Edit : System.Web.UI.Page
{
    public string province = "", city = "", area = "";
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.QueryString["id"] != null)
        {
            province = "97";
            city = "279";
            area = "1469";
        }
    }
    protected void btn_submit_Click(object sender, EventArgs e)
    {
        lbl_msg.Text = Request["province"] + "&" + Request["city"] + "&" + Request["area"];
    }
}

 

ajax加载数据用的还是GetArea.ashx。 

时间: 2024-09-20 19:54:01

ajax实现三级联动菜单代码的相关文章

ajax +php 二级联动菜单代码

ajax +php 二级联动菜单代码 <script language="javascript" > var http_request=false;   function send_request(url){//初始化,指定处理函数,发送请求的函数     http_request=false;  //开始初始化XMLHttpRequest对象  if(window.XMLHttpRequest){//Mozilla浏览器   http_request=new XMLHtt

用Ajax制作三级联动菜单

ajax|菜单|联动菜单 代码整个过程就是根据客户端的url请求判断哪个下拉列表的选中项发生改变,服务器根据请求url调用sql 数据库生成相应的数据写入tmp.xml并重定向到它.由于XmlHttpRequest对象与服务器交互时会得到执行完服务器代码后的response,所以tmp.xml数据将返回到客户端.这就是整个代码注要思想.值得注意的是在请求url时避免相同url,以免调用缓存中数据.一般方法有设置页面关闭写入缓存开关,在程序中设置头部no-cache或者避免相同url.避免相同ur

jquery+ajax+xml三级联动菜单

/*  * jQuery JavaScript Library v1.3.2  * http://jquery.com/  *  * Copyright (c) 2009 John Resig  * Dual licensed under the MIT and GPL licenses.  * http://docs.jquery.com/License  *  * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)  * Revision:

AJAX省市区三级联动下拉菜单(java版)_java

此小程序的功能主要是采用异步请求方式从数据库中调取省市区信息显示到下拉列表: 代码如下: 建立数据库中的代码和一些配置文件信息就省略了,主要有JavaScript中的代码为: $(document).ready(function(){ $.get("getProvince.do", function(result){ $("#showp").html(result); }); }) var xmlhttp; function mysend(str){ $(docum

JS封装的三级联动菜单(使用时只需要一行js代码)_javascript技巧

前言 在实际的项目开发中,我们经常需要三级联动,比如省市区的选择,商品的三级分类的选择等等. 而网上却找不到一个代码完整.功能强大.使用简单的三级联动菜单,大都只是简单的讲了一下实现思路. 下面就给大家分享我在工作中封装并在项目中使用的三级级联操作代码,如有错误或者不当的地方欢迎大家指正. 使用简单(只需要一行代码) 可以根据需要设置是否显示"请选择"项 支持回调(在三级分类加载完成后触发回调事件) 支持一个页面多个级联菜单 演示效果预览: 三级联动封装 原理:将selec标签以及相关

ajax 级联动菜单代码

ajax 级联动菜单代码 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>ajax2级联动菜单演示</title> <script language="javascript"> var http_request=false;   functi

Ajax商品分类三级联动的简单实现(案例)_AJAX相关

思路分析: 效果:当页面加载时,利用ajax异步向后台请求数据,加载一级商品类别,当选择一级商品时加载二级商品,选择二级商品加载三级商品. 实现: 1.当拿到数据后加载pid为0的商品,并动态创建option将商品追加到一级菜单中,并设置value值 2.当选择一级商品时加载pid=当前id的商品,并创建option将商品追加到二级菜单中,并设置value值 3.当选择二级商品时加载pid=当前id的商品,并创建option将商品追加到三级菜单中,并设置value值 页面效果: $(functi

jQuery实现的省市县三级联动菜单效果完整实例_jquery

本文实例讲述了jQuery实现的省市县三级联动菜单效果.分享给大家供大家参考,具体如下: 运行效果截图如下: 具体代码如下: <!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/

ajax实现三级联动的基本方法

本文实例为大家分享了ajax实现三级联动的具体代码,供大家参考,具体内容如下 1.首先在一个页面上布置一个div 方便日后引用方法 <body> <div id="sanji">//div的id为"sanji" </div> 2.sanji js处理页面 $(document).ready(function(){ //向div里面放三个下拉菜单 var str = "<select id='sheng'>&l