关于php+mysql+ajax省市区三级联动菜单,求帮助啊 三级联动 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://blog.csdn.net/sangliu/article/details/8674886http://blog.csdn.net/ykm0722/article/details/6064559http://www.cnblogs.com/freespider/archive/2010/08/30/1812669.html别人讲N遍,不如自己动手做一遍。 http://download.csdn.net/detail/jam00/5079966或者留个邮箱直接发给你 谢了,真的没有积分了。[email protected] 额,我在网上找了一个纯js的,把他放在静态页面就还用。但是放到我的项目里面就不好用了。不显示数据。用火狐调试显示还有,area.js,location.js这两个文件每个里面都声明了一个函数function showLocation(province , city , town)和function Location() 我在百度上查说$(document).ready(function() {的意思是:“页面加载成功后,页面内的所有链接在“点击”事件的时候,都加载那个函数”我的项目是在cms基础上进行二次开发,是不是和原有的js冲突了。本人js小白,求指导..... <script language="JavaScript" src="area.js"></script> <script language="JavaScript" src="location.js"></script> <div class="main"> <select id="loc_province" name="sheng" style="width: 80px;"></select> <select id="loc_city" name="shi" style="width:100px;"></select> <select id="loc_town" name="qu" style="width:120px;"></select> <input type="hidden" name="location_id" /> </div> 这个是html页面。area.jsfunction showLocation(province , city , town) { var loc = new Location(); var title = ['省份' , '地级市' , '市、县、区']; $.each(title , function(k , v) { title[k] = '<option value="">'+v+'</option>'; }) $('#loc_province').append(title[0]); $('#loc_city').append(title[1]); $('#loc_town').append(title[2]); $('#loc_province').change(function() { $('#loc_city').empty(); $('#loc_city').append(title[1]); loc.fillOption('loc_city' , '0,'+$('#loc_province').val()); $('#loc_town').empty(); $('#loc_town').append(title[2]); //$('input[@name=location_id]').val($(this).val()); }) $('#loc_city').change(function() { $('#loc_town').empty(); $('#loc_town').append(title[2]); loc.fillOption('loc_town' , '0,' + $('#loc_province').val() + ',' + $('#loc_city').val()); //$('input[@name=location_id]').val($(this).val()); }) $('#loc_town').change(function() { $('input[@name=location_id]').val($(this).val()); }) if (province) { loc.fillOption('loc_province' , '0' , province); if (city) { loc.fillOption('loc_city' , '0,'+province , city); if (town) { loc.fillOption('loc_town' , '0,'+province+','+city , town); } } } else { loc.fillOption('loc_province' , '0'); } }location.jsfunction Location() { this.items = { '0':{1:'北京市',22:'天津市',44:'上海市',66:'重庆市',108:'河北省',406:'山西省',622:'内蒙古',804:'辽宁省',945:'吉林省',1036:'黑龙江省',1226:'江苏省',1371:'浙江省',1500:'安徽省',1679:'福建省',1812:'江西省',1992:'山东省',2197:'河南省',2456:'湖北省',2613:'湖南省',2822:'广东省',3015:'广西',3201:'海南省',3235:'四川省',3561:'贵州省',3728:'云南省',3983:'西藏',4136:'陕西省',4334:'甘肃省',4499:'青海省',4588:'宁夏',4624:'新疆',4802:'香港',4822:'澳门',4825:'台湾省'}, '0,1':{2:'北京市'},.............};}Location.prototype.find = function(id) { if(typeof(this.items[id]) == "undefined") return false; return this.items[id];}Location.prototype.fillOption = function(el_id , loc_id , selected_id) { var el = $('#'+el_id); var json = this.find(loc_id); if (json) { var index = 1; var selected_index = 0; $.each(json , function(k , v) { var option = '<option value="'+k+'">'+v+'</option>'; el.append(option); if (k == selected_id) { selected_index = index; } index++; }) el.attr('selectedIndex' , selected_index); }} 谁知道的发到我邮箱里面来谢啦[email protected] http://blog.sina.com.cn/s/blog_49ea36420100t1ji.html这个例子你看看js,服务端你可以写原生php代码查询。有不懂的问题,再贴出来吧 http://www.helloweba.com/view-blog-188.htmlhttp://www.helloweba.com/demo/cityselect/这个是用js实现,效果来的快。 我用上面那个老兄邮箱发给我的代码,出现的问题是查询出来的省的数据都是“???”但是数据库编码是UTF8,我php的编码也是UTF8,不知道为啥会出现这种问题。还有就是我代码放到我的项目里,就只有省里面会有数据,但是市和区里面都查询不到数据,不知道为啥, 原生 js 代码不超过 20 行用 jquery 不超过 4 行,如果数据结构设计的好,一行也就可以了php 部分不算数据库连接,也就 3、4 行代码吧不至于搞得那么复杂吧?一天了。还没头绪 如果放在一个页面里可查询到数据,不过全是?放到我的项目里就只能查到省的数据.script type="text/javascript">//创建AJAX 引擎function getXmlHttpObject(){ var XmlHttpRequest; if(ActiveXObject){ //ie XmlHttpRequest=new ActiveXObject("Microsoft.XMLHTTP"); }else{ //火狐,opera XmlHttpRequest=new XMLHttpRequest(); } return XmlHttpRequest;}var myXmlHttpRequest="";//根据省级信息获取城市function getCities(){ myXmlHttpRequest=getXmlHttpObject(); if(myXmlHttpRequest){ var url="showCitiesPro.php";//post方式 var data="type=city&province="+$('province').value; myXmlHttpRequest.open("post",url,true);//异步 myXmlHttpRequest.setRequestHeader("content-type","application/x-www-form-urlencoded"); //指定回调函数 myXmlHttpRequest.onreadystatechange=chuliCity; //发送 myXmlHttpRequest.send(data); }}function chuliCity(){ if(myXmlHttpRequest.readyState==4){ //status==200 才是真正的成功 if(myXmlHttpRequest.status==200){ //取出服务器回送的数据 var cities=myXmlHttpRequest.responseXML.getElementsByTagName("name"); var codes=myXmlHttpRequest.responseXML.getElementsByTagName("code"); //每次执行都将id为city的select长度清零 $('city').length=0; var myOption=document.createElement("option"); myOption.innerText="---城市---"; $('city').appendChild(myOption); //遍历并取出城市 for(var i=0;i<cities.length;i++){ var city_name=cities[i].childNodes[0].nodeValue; var city_code=codes[i].childNodes[0].nodeValue; //创建新的元素option var myOption=document.createElement("option"); myOption.value=city_code; //赋文本 myOption.innerText=city_name; //添加到 id为city的select里 $('city').appendChild(myOption); } } }}//根据市级获取县级function getArea(){ myXmlHttpRequest=getXmlHttpObject(); if(myXmlHttpRequest){ var url="showCitiesPro.php";//post方式 var data="type=area&city="+$('city').value; myXmlHttpRequest.open("post",url,true);//异步 myXmlHttpRequest.setRequestHeader("content-type","application/x-www-form-urlencoded"); //指定回调函数 myXmlHttpRequest.onreadystatechange=chuliArea; //发送 myXmlHttpRequest.send(data); }}function chuliArea(){ if(myXmlHttpRequest.readyState==4){ //status==200 才是真正的成功 if(myXmlHttpRequest.status==200){ //取出服务器回送的数据 var cities=myXmlHttpRequest.responseXML.getElementsByTagName("name"); var codes=myXmlHttpRequest.responseXML.getElementsByTagName("code"); //每次执行都将id为city的select长度清零 $('area').length=0; var myOption=document.createElement("option"); myOption.innerText="---县城---"; $('area').appendChild(myOption); //遍历并取出城市 for(var i=0;i<cities.length;i++){ var city_name=cities[i].childNodes[0].nodeValue; var city_code=codes[i].childNodes[0].nodeValue; //创建新的元素option var myOption=document.createElement("option"); myOption.value=city_code; //赋文本 myOption.innerText=city_name; //添加到 id为area的select里 $('area').appendChild(myOption); } } }}//获取对象的函数function $(id){ return document.getElementById(id);}</script>这是html里的js代码 <td width="120">城市</td> <td width="300"> <select id="province" onChange="getCities();" name="province"> <option value="">---省---</option> <?php require_once(CP_PATH.'ext/process.php'); getProvince(); ?> </select> <select id="city" onChange="getArea();" name="city"> <option value="">---城市---</option> </select> <select id="area" name="area"> <option value="">---县城---</option> </select> 哎,主要是js的一点都不会啊,php也是半吊子。求大神给个js代码被,网上弄的都是一放到我的项目里就不好用了。关于php的给我个思路我自己弄也可以啊。我的数据库的结构就是省市区分三个表,每个表都有一个id,一个名字。市和区各有一个父id,市的父id就是省的id,区的父id就是市的id php 部分//连接mysql并选择库switch($_POST['type']) { case 'shi': $tbl = '市表'; $where = "pid='$_POST[id]'"; break; case 'xian': $tbl = '县表'; $where = "pid='$_POST[id]'"; break; default: $tbl = '省表'; $where = "1";}$sql = "select concat('<option value=\"', id, '\">', name, '</optipn') from $tbl where $where";$rs = mysql_query($sql);while(list($r) = mysql_fetch_row($rs)) $row[] = $r;echo join('', $row);js 部分 需加载 jquery$(function() { $('#sheng').change(function() { $('#shi').load(url, {type:'shi', id:$(this.val()}); }); $('#shi').change(function() { $('#xian').load(url, {type:'xian', id:$(this.val()}); }); $('#sheng').load(url, {type:sheng'});});HTML部分<select id="sheng"><option value="">---省---</option></select><select id="shi"><option value="">---市---</option></select><select id="xian"><option value="">---县---</option></select> 那个加载jquery是不是在页头加一个<script type="text/javascript" src="jquery.js"></script>啊 谢了,真的没有积分了。[email protected]给你一个实际在线的例子吧 www.35dalu.com/info/fabu 看看里面有2个省市区 三级联动。 谢了,真的没有积分了。[email protected]啥也不说了,分都给你了 谢谢大家的指导了,但是jam00这位仁兄在QQ邮箱上不厌其烦的指导,终于让我弄出来了,所以只有把分给他了 学习一套CMS php 如何让office文档和pdf文件直接显示在网页中? echo 换行问题 请大家帮忙测试PHPCMS文件管理器4.02测试版 关于变量在url上传递的问题?百度知道上半个月都没有人回答的问题! 关于下载的问题?急救! 写个分类信息程序多少钱? ×××××一个PHP的SESSION验证问题!!!!! 不是吧php4.1.0竟然有这种BUG?! 应该是个HTML语法问题,怎么我指定了<td>的宽度,然而过长的字符串还是会把表格撑开?怎么在单元格里自动折行呢? 新手求教下 PHP PEAR DB 的问题 求PHP网站实例
http://blog.csdn.net/ykm0722/article/details/6064559
http://www.cnblogs.com/freespider/archive/2010/08/30/1812669.html别人讲N遍,不如自己动手做一遍。
或者留个邮箱直接发给你
<script language="JavaScript" src="location.js"></script>
<div class="main">
<select id="loc_province" name="sheng" style="width: 80px;"></select>
<select id="loc_city" name="shi" style="width:100px;"></select>
<select id="loc_town" name="qu" style="width:120px;"></select>
<input type="hidden" name="location_id" />
</div> 这个是html页面。
area.jsfunction showLocation(province , city , town) {
var loc = new Location();
var title = ['省份' , '地级市' , '市、县、区'];
$.each(title , function(k , v) {
title[k] = '<option value="">'+v+'</option>';
})
$('#loc_province').append(title[0]);
$('#loc_city').append(title[1]);
$('#loc_town').append(title[2]);
$('#loc_province').change(function() {
$('#loc_city').empty();
$('#loc_city').append(title[1]);
loc.fillOption('loc_city' , '0,'+$('#loc_province').val());
$('#loc_town').empty();
$('#loc_town').append(title[2]);
//$('input[@name=location_id]').val($(this).val());
})
$('#loc_city').change(function() {
$('#loc_town').empty();
$('#loc_town').append(title[2]);
loc.fillOption('loc_town' , '0,' + $('#loc_province').val() + ',' + $('#loc_city').val());
//$('input[@name=location_id]').val($(this).val());
})
$('#loc_town').change(function() {
$('input[@name=location_id]').val($(this).val());
})
if (province) {
loc.fillOption('loc_province' , '0' , province);
if (city) {
loc.fillOption('loc_city' , '0,'+province , city);
if (town) {
loc.fillOption('loc_town' , '0,'+province+','+city , town);
}
}
} else {
loc.fillOption('loc_province' , '0');
}
}location.jsfunction Location() {
this.items = {
'0':{1:'北京市',22:'天津市',44:'上海市',66:'重庆市',108:'河北省',406:'山西省',622:'内蒙古',804:'辽宁省',945:'吉林省',1036:'黑龙江省',1226:'江苏省',1371:'浙江省',1500:'安徽省',1679:'福建省',1812:'江西省',1992:'山东省',2197:'河南省',2456:'湖北省',2613:'湖南省',2822:'广东省',3015:'广西',3201:'海南省',3235:'四川省',3561:'贵州省',3728:'云南省',3983:'西藏',4136:'陕西省',4334:'甘肃省',4499:'青海省',4588:'宁夏',4624:'新疆',4802:'香港',4822:'澳门',4825:'台湾省'},
'0,1':{2:'北京市'},.............};
}Location.prototype.find = function(id) {
if(typeof(this.items[id]) == "undefined")
return false;
return this.items[id];
}Location.prototype.fillOption = function(el_id , loc_id , selected_id) {
var el = $('#'+el_id);
var json = this.find(loc_id);
if (json) {
var index = 1;
var selected_index = 0;
$.each(json , function(k , v) {
var option = '<option value="'+k+'">'+v+'</option>';
el.append(option);
if (k == selected_id) {
selected_index = index;
}
index++;
})
el.attr('selectedIndex' , selected_index);
}
}
有不懂的问题,再贴出来吧
http://www.helloweba.com/demo/cityselect/这个是用js实现,效果来的快。
用 jquery 不超过 4 行,如果数据结构设计的好,一行也就可以了php 部分不算数据库连接,也就 3、4 行代码吧不至于搞得那么复杂吧?一天了。还没头绪
//创建AJAX 引擎
function getXmlHttpObject(){
var XmlHttpRequest;
if(ActiveXObject){
//ie
XmlHttpRequest=new ActiveXObject("Microsoft.XMLHTTP");
}else{
//火狐,opera
XmlHttpRequest=new XMLHttpRequest();
}
return XmlHttpRequest;
}
var myXmlHttpRequest="";
//根据省级信息获取城市
function getCities(){
myXmlHttpRequest=getXmlHttpObject();
if(myXmlHttpRequest){
var url="showCitiesPro.php";//post方式
var data="type=city&province="+$('province').value; myXmlHttpRequest.open("post",url,true);//异步
myXmlHttpRequest.setRequestHeader("content-type","application/x-www-form-urlencoded");
//指定回调函数
myXmlHttpRequest.onreadystatechange=chuliCity;
//发送
myXmlHttpRequest.send(data);
}
}
function chuliCity(){
if(myXmlHttpRequest.readyState==4){
//status==200 才是真正的成功
if(myXmlHttpRequest.status==200){
//取出服务器回送的数据
var cities=myXmlHttpRequest.responseXML.getElementsByTagName("name");
var codes=myXmlHttpRequest.responseXML.getElementsByTagName("code"); //每次执行都将id为city的select长度清零
$('city').length=0;
var myOption=document.createElement("option");
myOption.innerText="---城市---";
$('city').appendChild(myOption);
//遍历并取出城市
for(var i=0;i<cities.length;i++){
var city_name=cities[i].childNodes[0].nodeValue;
var city_code=codes[i].childNodes[0].nodeValue;
//创建新的元素option
var myOption=document.createElement("option");
myOption.value=city_code;
//赋文本
myOption.innerText=city_name;
//添加到 id为city的select里
$('city').appendChild(myOption);
}
}
}
}
//根据市级获取县级
function getArea(){
myXmlHttpRequest=getXmlHttpObject();
if(myXmlHttpRequest){
var url="showCitiesPro.php";//post方式
var data="type=area&city="+$('city').value; myXmlHttpRequest.open("post",url,true);//异步
myXmlHttpRequest.setRequestHeader("content-type","application/x-www-form-urlencoded");
//指定回调函数
myXmlHttpRequest.onreadystatechange=chuliArea;
//发送
myXmlHttpRequest.send(data);
}
}
function chuliArea(){
if(myXmlHttpRequest.readyState==4){
//status==200 才是真正的成功
if(myXmlHttpRequest.status==200){
//取出服务器回送的数据
var cities=myXmlHttpRequest.responseXML.getElementsByTagName("name");
var codes=myXmlHttpRequest.responseXML.getElementsByTagName("code"); //每次执行都将id为city的select长度清零
$('area').length=0;
var myOption=document.createElement("option");
myOption.innerText="---县城---";
$('area').appendChild(myOption);
//遍历并取出城市
for(var i=0;i<cities.length;i++){
var city_name=cities[i].childNodes[0].nodeValue;
var city_code=codes[i].childNodes[0].nodeValue;
//创建新的元素option
var myOption=document.createElement("option");
myOption.value=city_code;
//赋文本
myOption.innerText=city_name;
//添加到 id为area的select里
$('area').appendChild(myOption);
}
}
}
}
//获取对象的函数
function $(id){
return document.getElementById(id);
}</script>这是html里的js代码 <td width="120">城市</td>
<td width="300">
<select id="province" onChange="getCities();" name="province">
<option value="">---省---</option>
<?php
require_once(CP_PATH.'ext/process.php'); getProvince();
?>
</select> <select id="city" onChange="getArea();" name="city">
<option value="">---城市---</option>
</select> <select id="area" name="area">
<option value="">---县城---</option>
</select>
switch($_POST['type']) {
case 'shi':
$tbl = '市表';
$where = "pid='$_POST[id]'";
break;
case 'xian':
$tbl = '县表';
$where = "pid='$_POST[id]'";
break;
default:
$tbl = '省表';
$where = "1";
}
$sql = "select concat('<option value=\"', id, '\">', name, '</optipn') from $tbl where $where";
$rs = mysql_query($sql);
while(list($r) = mysql_fetch_row($rs)) $row[] = $r;
echo join('', $row);
js 部分 需加载 jquery
$(function() {
$('#sheng').change(function() {
$('#shi').load(url, {type:'shi', id:$(this.val()});
});
$('#shi').change(function() {
$('#xian').load(url, {type:'xian', id:$(this.val()});
}); $('#sheng').load(url, {type:sheng'});
});HTML部分
<select id="sheng"><option value="">---省---</option></select>
<select id="shi"><option value="">---市---</option></select>
<select id="xian"><option value="">---县---</option></select>
给你一个实际在线的例子吧 www.35dalu.com/info/fabu 看看里面有2个省市区 三级联动。