如何省份、城市实现动态级联选择功能?像招聘网站(51job等等)首页上的搜索时选择地区那样:点击文本框或按钮,弹出一个小窗口,窗口上显示了各个省份的名字,当点击不同的省份又弹出或改变成此省份下面对应的城市类表。请问这种功能如何实现的,希望有人能给个完整的代码我啊。拜托了,注:我是学ASP.NET的,最好是用此种技术或JS实现的代码。

解决方案 »

  1.   

    http://blog.csdn.net/Sandy945/archive/2009/06/29/4307710.aspx
      

  2.   

    http://topic.csdn.net/u/20100301/21/12b00f66-7f1b-41ff-b883-244fa57b6b81.html
      

  3.   

    看我之前写的:http://blog.csdn.net/taomanman/archive/2010/02/26/5330180.aspx也是级联,是三级级联,不过可不是弹出框的那种,你参考下!
      

  4.   


     
    /*联动方法,在写成java脚本后,要保证所取得ID是一致的,比如:
    --City表示联动的那个下拉列表--
    <select name="City" id="City"> 
      <option value="" selected="selected">请先选择区域</option> 
    </select>
    --Provinces为触发事件的列表--
      <select name="Provinces" id="Provinces" onchange="changeselect(this.value)" > 
        <option value="" selected="selected">选择区域</option>
        <option value="1">北京</option><option value="2">上海</option><option value="3">天津</option><option value="4">重庆</option><option value="5">河北</option><option value="6">山西</option><option value="7">内蒙古</option><option value="8">辽宁</option><option value="9">吉林</option><option value="10">黑龙江</option><option value="11">江苏</option><option value="12">浙江</option><option value="13">安徽</option><option value="14">福建</option><option value="15">江西</option><option value="16">山东</option><option value="17">河南</option><option value="18">湖北</option><option value="19">湖南</option><option value="20">广东</option><option value="21">广西</option><option value="22">海南</option><option value="23">四川</option><option value="24">贵州</option><option value="25">云南</option><option value="26">西藏</option><option value="27">陕西</option><option value="28">甘肃</option><option value="29">宁夏</option><option value="30">青海</option><option value="31">新疆</option><option value="32">香港</option><option value="33">澳门</option><option value="34">台湾</option>
      </select>
    */
    function changeselect(selectValue)
    {
        document.getElementById("City").length=0;
        document.getElementById("City").options[0] = new Option("请选择","");    for(i=0;i<subcat.length;i++)
        {
            if (subcat[i][0] == selectValue)
            {
            document.getElementById("City").options[document.getElementById("City").length] = new Option(subcat[i][1], subcat[i][2]);
            }
        }
    }
      

  5.   

    var subcat = new Array();
     
    subcat[0]=new Array("1","东城","1");
     
    subcat[1]=new Array("1","西城","2");
     
    subcat[2]=new Array("1","崇文","3");
     
    subcat[3]=new Array("1","宣武","4");
     
    subcat[4]=new Array("1","朝阳","5");
     
    subcat[5]=new Array("1","丰台","6");
     
    subcat[6]=new Array("1","石景山","7");
     
    subcat[7]=new Array("1","海淀","8");
     
    subcat[8]=new Array("1","门头沟","9");
     
    subcat[9]=new Array("1","房山","10");
     
    subcat[10]=new Array("1","通州","11");
     
    subcat[11]=new Array("1","顺义","12");
     
    subcat[12]=new Array("1","昌平","13");
     
    subcat[13]=new Array("1","大兴","14");
     
    subcat[14]=new Array("1","平谷","15");
     
    subcat[15]=new Array("1","怀柔","16");
     
    subcat[16]=new Array("1","密云","17");
     
    subcat[17]=new Array("1","延庆","18");
     
    subcat[18]=new Array("2","黄浦","19");
     
    subcat[19]=new Array("2","卢湾","20");
     
    subcat[20]=new Array("2","徐汇","21");
     
    subcat[21]=new Array("2","长宁","22");
     
    subcat[22]=new Array("2","静安","23");
     
    subcat[23]=new Array("2","普陀","24");
     
    subcat[24]=new Array("2","闸北","25");
     
    subcat[25]=new Array("2","虹口","26");
     
    subcat[26]=new Array("2","杨浦","27");
     
    subcat[27]=new Array("2","闵行","28");
     
    subcat[28]=new Array("2","宝山","29");
     
    subcat[29]=new Array("2","嘉定","30");
     
    subcat[30]=new Array("2","浦东","31");
     
    subcat[31]=new Array("2","金山","32");
     
    subcat[32]=new Array("2","松江","33");
     
    subcat[33]=new Array("2","青浦","34");
     
    subcat[34]=new Array("2","南汇","35");
     
    subcat[35]=new Array("2","奉贤","36");
     
    subcat[36]=new Array("2","崇明","37");
     
    subcat[37]=new Array("3","和平","38");
     
    subcat[38]=new Array("3","东丽","39");
     
    subcat[39]=new Array("3","河东","40");
     
    subcat[40]=new Array("3","西青","41");
     
    subcat[41]=new Array("3","河西","42");
     
    subcat[42]=new Array("3","津南","43");
     
    subcat[43]=new Array("3","南开","44");
     
    subcat[44]=new Array("3","北辰","45");
     
    subcat[45]=new Array("3","河北","46");
     
    subcat[46]=new Array("3","武清","47");
     
    subcat[47]=new Array("3","红挢","48");
     
    subcat[48]=new Array("3","塘沽","49");
     
    subcat[49]=new Array("3","汉沽","50");
     
    subcat[50]=new Array("3","大港","51");
     
    subcat[51]=new Array("3","宁河","52");
     
    subcat[52]=new Array("3","静海","53");
     
    subcat[53]=new Array("3","宝坻","54");
     
    subcat[54]=new Array("3","蓟县","55");
     
    subcat[55]=new Array("4","万州","56");
     
    subcat[56]=new Array("4","涪陵","57");
     
    subcat[57]=new Array("4","渝中","58");
     
    subcat[58]=new Array("4","大渡口","59");
     
    subcat[59]=new Array("4","江北","60");
     
    subcat[60]=new Array("4","沙坪坝","61");
     
    subcat[61]=new Array("4","九龙坡","62");
     
    subcat[62]=new Array("4","南岸","63");
     
    subcat[63]=new Array("4","北碚","64");
     
    subcat[64]=new Array("4","万盛","65");
     
    subcat[65]=new Array("4","双挢","66");
     
    subcat[66]=new Array("4","渝北","67");
     
    subcat[67]=new Array("4","巴南","68");
     
    subcat[68]=new Array("4","黔江","69");
     
    subcat[69]=new Array("4","长寿","70");
     
    subcat[70]=new Array("4","綦江","71");
     
    subcat[71]=new Array("4","潼南","72");
     
    subcat[72]=new Array("4","铜梁","73");
     
    subcat[73]=new Array("4","大足","74");
     
    subcat[74]=new Array("4","荣昌","75");
     
    subcat[75]=new Array("4","壁山","76");
     
    subcat[76]=new Array("4","梁平","77");
     
    subcat[77]=new Array("4","城口","78");
     
    subcat[78]=new Array("4","丰都","79");
     
    subcat[79]=new Array("4","垫江","80");
     
    subcat[80]=new Array("4","武隆","81");
     
    subcat[81]=new Array("4","忠县","82");
     
    subcat[82]=new Array("4","开县","83");
     
    subcat[83]=new Array("4","云阳","84");
     
    subcat[84]=new Array("4","奉节","85");
     
    subcat[85]=new Array("4","巫山","86");
     
    subcat[86]=new Array("4","巫溪","87");
     
    subcat[87]=new Array("4","石柱","88");
     
    subcat[88]=new Array("4","秀山","89");
     
    subcat[89]=new Array("4","酉阳","90");
     
    subcat[90]=new Array("4","彭水","91");
     
    subcat[91]=new Array("4","江津","92");
     
    subcat[92]=new Array("4","合川","93");
     
    subcat[93]=new Array("4","永川","94");
     
    subcat[94]=new Array("4","南川","95");
     
    subcat[95]=new Array("5","石家庄","96");
     
    subcat[96]=new Array("5","邯郸","97");
     
    subcat[97]=new Array("5","邢台","98");
     
    subcat[98]=new Array("5","保定","99");
     
    subcat[99]=new Array("5","张家口","100");
     
    subcat[100]=new Array("5","承德","101");
     
    subcat[101]=new Array("5","廊坊","102");
     
    subcat[102]=new Array("5","唐山","103");
     
    subcat[103]=new Array("5","秦皇岛","104");
     
    subcat[104]=new Array("5","沧州","105");
     
    subcat[105]=new Array("5","衡水","106");
     
    subcat[106]=new Array("6","太原","107");
     
    subcat[107]=new Array("6","大同","108");
     
    subcat[108]=new Array("6","阳泉","109");
     
    subcat[109]=new Array("6","长治","110");
     
    subcat[110]=new Array("6","晋城","111");
     
    subcat[111]=new Array("6","朔州","112");
     
    subcat[112]=new Array("6","吕梁","113");
     
    subcat[113]=new Array("6","忻州","114");
     
    subcat[114]=new Array("6","晋中","115");
     
    subcat[115]=new Array("6","临汾","116");
     
    subcat[116]=new Array("6","运城","117");
     
    subcat[117]=new Array("7","呼和浩特","118");
     
    subcat[118]=new Array("7","包头","119");
     
    subcat[119]=new Array("7","乌海","120");
     
    subcat[120]=new Array("7","赤峰","121");
     
    subcat[121]=new Array("7","呼伦贝尔盟","122");
     
    subcat[122]=new Array("7","阿拉善盟","123");
     
    subcat[123]=new Array("7","哲里木盟","124");
     
    subcat[124]=new Array("7","兴安盟","125");
     
    subcat[125]=new Array("7","乌兰察布盟","126");
     
    subcat[126]=new Array("7","锡林郭勒盟","127");
     
    subcat[127]=new Array("7","巴彦淖尔盟","128");
     
    subcat[128]=new Array("7","伊克昭盟","129");
     
    subcat[129]=new Array("8","沈阳","130");
     
    subcat[130]=new Array("8","大连","131");
     
    subcat[131]=new Array("8","鞍山","132");
     
    subcat[132]=new Array("8","抚顺","133");
     
    subcat[133]=new Array("8","本溪","134");
     
    subcat[134]=new Array("8","丹东","135");
     
    subcat[135]=new Array("8","锦州","136");
     
    subcat[136]=new Array("8","营口","137");
     
    subcat[137]=new Array("8","阜新","138");
     
    subcat[138]=new Array("8","辽阳","139");
     
    subcat[139]=new Array("8","盘锦","140");
     
    subcat[140]=new Array("8","铁岭","141");
     
    subcat[141]=new Array("8","朝阳","142");
     
    subcat[142]=new Array("8","葫芦岛","143");
     
    subcat[143]=new Array("9","长春","144");
     
    subcat[144]=new Array("9","吉林","145");
     
    subcat[145]=new Array("9","四平","146");
     
    subcat[146]=new Array("9","辽源","147");
     
    subcat[147]=new Array("9","通化","148");
     
    subcat[148]=new Array("9","白山","149");
     
    subcat[149]=new Array("9","松原","150");
     
    subcat[150]=new Array("9","白城","151");
     
    subcat[151]=new Array("9","延边","152");
     
    subcat[152]=new Array("10","哈尔滨","153");
     
    subcat[153]=new Array("10","齐齐哈尔","154");
     
    subcat[154]=new Array("10","牡丹江","155");
     
    subcat[155]=new Array("10","佳木斯","156");
     
    subcat[156]=new Array("10","大庆","157");
     
    subcat[157]=new Array("10","绥化","158");
     
    subcat[158]=new Array("10","鹤岗","159");
     
    subcat[159]=new Array("10","鸡西","160");
     
    subcat[160]=new Array("10","黑河","161");
     
    subcat[161]=new Array("10","双鸭山","162");
     
    subcat[162]=new Array("10","伊春","163");
     
    subcat[163]=new Array("10","七台河","164");
     
    subcat[164]=new Array("10","大兴安岭","165");
     
    subcat[165]=new Array("11","南京","166");
     
    subcat[166]=new Array("11","镇江","167");
     
    subcat[167]=new Array("11","苏州","168");
     
    subcat[168]=new Array("11","南通","169");
     
    subcat[169]=new Array("11","扬州","170");
     
    subcat[170]=new Array("11","盐城","171");
     
    subcat[171]=new Array("11","徐州","172");
     
    subcat[172]=new Array("11","连云港","173");
     
    subcat[173]=new Array("11","常州","174");
     
    subcat[174]=new Array("11","无锡","175");
     
    subcat[175]=new Array("11","宿迁","176");
     
    subcat[176]=new Array("11","泰州","177");
     
    subcat[177]=new Array("11","淮安","178");
     
    subcat[178]=new Array("12","杭州","179");
     
    subcat[179]=new Array("12","宁波","180");
     
    subcat[180]=new Array("12","温州","181");
     
    subcat[181]=new Array("12","嘉兴","182");
     
    subcat[182]=new Array("12","湖州","183");
     
    subcat[183]=new Array("12","绍兴","184");
     
    subcat[184]=new Array("12","金华","185");
     
    subcat[185]=new Array("12","衢州","186");
     
    subcat[186]=new Array("12","舟山","187");
     
    subcat[187]=new Array("12","台州","188");
     
    subcat[188]=new Array("12","丽水","189");
     
    subcat[189]=new Array("13","合肥","190");
     
    subcat[190]=new Array("13","芜湖","191");
     
    subcat[191]=new Array("13","蚌埠","192");
     
    subcat[192]=new Array("13","马鞍山","193");
     
    subcat[193]=new Array("13","淮北","194");
     
    subcat[194]=new Array("13","铜陵","195");
     
    subcat[195]=new Array("13","安庆","196");
     
    subcat[196]=new Array("13","黄山","197");
     
    subcat[197]=new Array("13","滁州","198");
     
    subcat[198]=new Array("13","宿州","199");
     
    subcat[199]=new Array("13","池州","200");
     
    subcat[200]=new Array("13","淮南","201");
     
    subcat[201]=new Array("13","巢湖","202");
     
    subcat[202]=new Array("13","阜阳","203");
     
    subcat[203]=new Array("13","六安","204");
     
    subcat[204]=new Array("13","宣城","205");
     
    subcat[205]=new Array("13","亳州","206");
     
    subcat[206]=new Array("14","福州","207");
     
    subcat[207]=new Array("14","厦门","208");
     
    subcat[208]=new Array("14","莆田","209");
     
    subcat[209]=new Array("14","三明","210");
     
    subcat[210]=new Array("14","泉州","211");
     
    subcat[211]=new Array("14","漳州","212");
     
    subcat[212]=new Array("14","南平","213");
     
    subcat[213]=new Array("14","龙岩","214");
     
    subcat[214]=new Array("14","宁德","215");
     
    subcat[215]=new Array("15","南昌市","216");
     
    subcat[216]=new Array("15","景德镇","217");
     
    subcat[217]=new Array("15","九江","218");
     
    subcat[218]=new Array("15","鹰潭","219");
     
    subcat[219]=new Array("15","萍乡","220");
     
    subcat[220]=new Array("15","新馀","221");
     
    subcat[221]=new Array("15","赣州","222");
     
    subcat[222]=new Array("15","吉安","223");
     
    subcat[223]=new Array("15","宜春","224");
     
    subcat[224]=new Array("15","抚州","225");
     
    subcat[225]=new Array("15","上饶","226");
     
    subcat[226]=new Array("16","济南","227");
     
    subcat[227]=new Array("16","青岛","228");
     
    subcat[228]=new Array("16","淄博","229");
     
      

  6.   

    1.html代码<HTML>
        <HEAD>
            <title>XmlHttp实现无刷新三联动下拉框</title>
            <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
            <meta name="CODE_LANGUAGE" Content="C#">
            <meta name="vs_defaultClientScript" content="JavaScript">
            <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
        </HEAD>
        <body MS_POSITIONING="GridLayout">
            <form id="Form1" method="post" runat="server">
                <INPUT style="Z-INDEX: 102; LEFT: 448px; WIDTH: 56px; POSITION: absolute; TOP: 80px; HEIGHT: 24px"
                    onclick="getData();" type="button" value="保存" id="Button1" name="Button1" runat="server">
                <asp:TextBox id="TextBox1" style="Z-INDEX: 101; LEFT: 16px; POSITION: absolute; TOP: 80px" runat="server"
                    Width="424px"></asp:TextBox>
                <asp:DropDownList id="DropDownList2" runat="server" style="Z-INDEX: 103; LEFT: 176px; POSITION: absolute; TOP: 120px"></asp:DropDownList>
                <asp:DropDownList id="DropDownList1" runat="server" style="Z-INDEX: 104; LEFT: 16px; POSITION: absolute; TOP: 120px"></asp:DropDownList>
                <asp:DropDownList id="DropDownList3" runat="server" style="Z-INDEX: 105; LEFT: 296px; POSITION: absolute; TOP: 120px"></asp:DropDownList><INPUT style="Z-INDEX: 106; LEFT: 8px; WIDTH: 160px; POSITION: absolute; TOP: 176px; HEIGHT: 22px"
                    type="hidden" size="21" id="hidprovince" runat="server"><INPUT style="Z-INDEX: 107; LEFT: 184px; POSITION: absolute; TOP: 176px" type="hidden"
                    id="hidcity" runat="server"><INPUT style="Z-INDEX: 108; LEFT: 360px; POSITION: absolute; TOP: 176px" type="hidden"
                    id="hidarea" runat="server">
                <SCRIPT LANGUAGE="JavaScript">
                <!--
                    //以XML求取DropDownList2的数据
                    function XmlPost2(obj)
                    {
                      var svalue = obj.value;
                      var webFileUrl = "?povinceid=" + svalue;
                      var result = "";
                      var xmlHttp = new ActiveXObject("MSXML2.XMLHTTP");
                      xmlHttp.open("POST", webFileUrl, false);
                      xmlHttp.send("");
                      result = xmlHttp.responseText;
                      
                      if(result != "")
                      {
                        document.all("DropDownList2").length=0;
                        var piArray = result.split(",");
                        for(var i=0;i<piArray.length;i++)
                        {
                          var ary1 = piArray[i].toString().split("|");
                          document.all("DropDownList2").options.add(new Option(ary1[1].toString(),ary1[0].toString()));
                        }
                      }
                      else
                      {
                        alert(result);
                      }
                    }
                    //以XML求取DropDownList3的数据
                    function XmlPost3(obj)
                    {
                      var svalue = obj.value;
                      var webFileUrl = "?cityid=" + svalue;
                      var result = "";
                      var xmlHttp = new ActiveXObject("MSXML2.XMLHTTP");
                      xmlHttp.open("POST", webFileUrl, false);
                      xmlHttp.send("");
                      result = xmlHttp.responseText;
                      
                      if(result != "")
                      {
                        document.all("DropDownList3").length=0;
                        var piArray = result.split(",");
                        for(var i=0;i<piArray.length;i++)
                        {
                          var ary1 = piArray[i].toString().split("|");
                          document.all("DropDownList3").options.add(new Option(ary1[1].toString(),ary1[0].toString()));
                        }
                      }
                      else
                      {
                        alert(result);
                      }
                    }
                    function getData()
                    {
                        var province=document.getElementById("DropDownList1");
                        var pindex = province.selectedIndex;
                        var pValue = province.options[pindex].value;
                        var pText  = province.options[pindex].text;
                        
                        var city=document.getElementById("DropDownList2");
                        var cindex = city.selectedIndex;
                        var cValue = city.options[cindex].value;
                        var cText  = city.options[cindex].text;
                        
                        var area=document.getElementById("DropDownList3");
                        var aindex = area.selectedIndex;
                        var aValue = area.options[aindex].value;
                        var aText  = area.options[aindex].text;
                        
                        var txt=document.getElementById("TextBox1");                                                    document.getElementById("<%=TextBox1.ClientID%>").innerText="省:"+pValue+"|"+pText+"市:"+cValue+"|"+cText+"区:"+aValue+"|"+aText;
                        document.Form1.hidprovince.value=pValue;
                        document.Form1.hidcity.value=cValue;
                        document.Form1.hidarea.value=aValue;
                    }
                //-->
                </SCRIPT>
            </form>
        </body>
    </HTML>
      

  7.   

    2.cs代码public class WebForm1 : System.Web.UI.Page
        {
            protected System.Web.UI.WebControls.DropDownList DropDownList1;
            protected System.Web.UI.WebControls.DropDownList DropDownList2;
            protected System.Web.UI.WebControls.DropDownList DropDownList3;
            protected System.Web.UI.WebControls.TextBox TextBox1;
        
            public static string ConnectionString=System.Configuration .ConfigurationSettings .AppSettings["ConnectionString"];
        
            GetDataSet#region GetDataSet
            public static DataSet GetDataSet(string sql)
            {
                SqlDataAdapter    sda =new SqlDataAdapter(sql,ConnectionString);
                DataSet ds=new DataSet();
                sda.Fill(ds);
                return ds;
            }
            #endregion        property#region property
            private string provinceid
            {
                get
                {
                    if(ViewState["provinceid"]!=null && ViewState["provinceid"].ToString()!="")
                    {
                        return ViewState["provinceid"].ToString();
                    }
                    else
                    {
                        if(Request["provinceid"]!=null && Request["provinceid"].ToString()!="")
                        {
                            return Request["provinceid"];
                        }
                        else
                        {
                            return "";
                        }
                    }
                }
                set
                {
                    ViewState["provinceid"]=value;
                }
            }
            private string cityid
            {
                get
                {
                    if(ViewState["cityid"]!=null && ViewState["cityid"].ToString()!="")
                    {
                        return ViewState["cityid"].ToString();
                    }
                    else
                    {
                        if(Request["cityid"]!=null && Request["cityid"].ToString()!="")
                        {
                            return Request["cityid"];
                        }
                        else
                        {
                            return "";
                        }
                    }
                }
                set
                {
                    ViewState["cityid"]=value;
                }
            }
            #endregion        Page_Load#region Page_Load
            private void Page_Load(object sender, System.EventArgs e)
            {
                if(!this.IsPostBack)
              {
                this.down1_bind();
                    this.DropDownList1.Attributes.Add("onchange","XmlPost2(this);");
                    this.DropDownList2.Attributes.Add("onchange","XmlPost3(this);");
              }
              if(provinceid != "")
              {
                this.down2_bind(provinceid);
              }
                if(cityid != "")
              {
                this.down3_bind(cityid);
              }
            }
            
            #endregion        down2_bind#region down2_bind
            private void down2_bind(string id)
            {
              string mystr = "";
              string sql = "select cityID,city from city where father = '" + id + "'";
              DataSet ds = GetDataSet(sql);          if(ds.Tables[0].Rows.Count != 0)
              {
                for(int i=0;i<ds.Tables[0].Rows.Count;i++)
                {
                  mystr += "," + ds.Tables[0].Rows[i][0].ToString() + "|" + ds.Tables[0].Rows[i][1].ToString();
                }
                mystr = mystr.Substring(1);
              }
              this.Response.Write(mystr);
              this.Response.End();
            }
            #endregion        down3_bind#region down3_bind
            private void down3_bind(string id)
            {
              string mystr = "";
              string sql = "select areaID,area from area where father = '" + id + "'";
              DataSet ds = GetDataSet(sql);          if(ds.Tables[0].Rows.Count != 0)
              {
                for(int i=0;i<ds.Tables[0].Rows.Count;i++)
                {
                  mystr += "," + ds.Tables[0].Rows[i][0].ToString() + "|" + ds.Tables[0].Rows[i][1].ToString();
                }
                mystr = mystr.Substring(1);
              }
              this.Response.Write(mystr);
              this.Response.End();
            }        #endregion
            
            down1_bind#region down1_bind
            private void down1_bind()
            {
              string sql = "select provinceID,province from province";
              DataSet ds = GetDataSet(sql);
              this.DropDownList1.DataSource = ds;
              this.DropDownList1.DataValueField = "provinceID";
              this.DropDownList1.DataTextField = "province";
              this.DropDownList1.DataBind();          
            }        #endregion        Web Form Designer generated code#region Web Form Designer generated code
            override protected void OnInit(EventArgs e)
            {
                //
                // CODEGEN: This call is required by the ASP.NET Web Form Designer.
                //
                InitializeComponent();
                base.OnInit(e);
            }        /**//// <summary>
            /// Required method for Designer support - do not modify
            /// the contents of this method with the code editor.
            /// </summary>
            private void InitializeComponent()
            {    
                this.Load += new System.EventHandler(this.Page_Load);        }
            #endregion
        }
    3.数据库area1.rar
    4.Ajax实现无刷新三联动下拉框5.源代码下载XmlHttpselect.rar
     http://www.cnblogs.com/singlepine/archive/2005/10/31/265678.html