| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2699 人关注过本帖
标题:关于php与javascript相互嵌套使用实现三级菜单联动
只看楼主 加入收藏
flyingpig
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-1-10
收藏
 问题点数:0 回复次数:3 
关于php与javascript相互嵌套使用实现三级菜单联动

大家好,我要实现三级菜单连动的,但是需要javascrpt和php(Mysql)联合使用的将用php语句查出来的数据库表中的字段值赋值给javascript变量。有一问题就是php和javascript的执行先后问题,就是说php是在服务器端执行的,而javascript是在客户端执行的,所以,在他们相互调用的过程中,很多变量的值丢失了。刚刚接触php和javascript,所以说的也不知道对不对,大家见谅,希望大家能够帮助我。以下是我写的错误的程序,看看大家有没有什么思路?
<!--//
var formNames = new Array("formA","formB","formC","formD");
var optionsName = new Array();
var optionsValue = new Array();
var optionsFactor = new Array();
var optionsType = new Array();

<?php

$strSQL = 'select address_state from ' . TABLE_DELIVERY_ADDRESS . ' group by address_state ';
$result = $db->Execute( $strSQL );
$i=0;
while ( !$result->EOF ) {
//$synchronized_str= "area[$count_country] = new Array();\n area[$count_country][0] =".$record_set[1].";\n ";
$synchronized_str= "optionsFactor[$i]=0;\n optionsType[$i]=0;\n optionsName[$i]=optionsValue[$i]=".$result->fields['address_state'].";\n ";
echo $synchronized_str;
$result->MoveNext();
$i=$i+1;
}

for($j=0;$j<=$i;$j++)
{ $state="optionsName[$j]";
//$strSQL= "select address_city from ".TABLE_DELIVERY_ADDRESS." where address_state like %". $state."% group by address_city ";
$strSQL = 'select `address_city` from `'. TABLE_DELIVERY_ADDRESS . '` where `address_state` like "%' . $state .'%" group by `address_city`;';
$result= $db->Execute($strSQL);
while ( !$result->EOF ) {
$synchronized_str="optionsFactor[$i]=".$j."; \n"."optionsType[$i]=1;\n optionsName[$i]=optionsValue[$i]=".$result->fields['address_city'].";\n";
echo $synchronized_str;
$result->MoveNext();
$i=$i+1;
}
}
for($j;$j<=$i;$j++)
{
$city= "optionsName[$j]";
//$strSQL= "select address_town from ".TABLE_DELIVERY_ADDRESS." where address_city like %". $city ."% group by address_town ";
$strSQL = 'select `address_town` from `' . TABLE_DELIVERY_ADDRESS . '` where `address_city` like "%' . $city .'%" group by `address_town` ;';
$result= $db->Execute( $strSQL );
while ( !$result->EOF ) {
$synchronized_str="optionsFactor[$i]=".$j."; \n"."optionsType[$i]=2;\n optionsName[$i]=optionsValue[$i]=".$result->fields['address_town'].";\n";
echo $synchronized_str;
$result->MoveNext();
$i=$i+1;
}
}
for($j;$j<=$i;$j++)
{
$town="optionsName[$j]";
// $strSQL= "select address_area from ".TABLE_DELIVERY_ADDRESS." where address_town like %". $town."% group by address_area ";
$strSQL = 'select `address_area` from `' . TABLE_DELIVERY_ADDRESS . '` where `address_area` IS NOT NULL and `address_town` like "%' . $town .'%" group by `address_area` ;';
$result= $db->Execute( $strSQL );
while ( !$result->EOF ) {
$synchronized_str="optionsFactor[$i]=".$j."; \n"."optionsType[$i]=3;\n optionsName[$i]=optionsValue[$i]=".$result->fields['address_area'].";\n";
echo $synchronized_str;
$result->MoveNext();
$i=$i+1;
}
}
?>

图片附件: 游客没有浏览图片的权限,请 登录注册

搜索更多相关主题的帖子: javascript 嵌套 php 菜单 数据库 
2006-01-10 14:44
wangshaobo
Rank: 2
等 级:新手上路
威 望:3
帖 子:81
专家分:0
注 册:2005-11-28
收藏
得分:0 

找了一个,看看有没有帮助,

<!--
js联动菜单的代码实例
原创: wolf (wolf_weq@msn.com)
-->
<script language="javascript">
function ChangeOptiontype(thisvalue){
//document.write(thisvalue);
var tmpdate='一级分类A,1#二级分类A-1,2#二级分类A-2,3#二级分类A-3,4#二级分类A-4,5#二级分类A-5,8#二级分类A-6,;一级分类B,6#二级分类B-1,7#二级分类B-2,;';
//var tmpdate='<%=GetProType()%>'; //你可以通过服务器端脚本动态在这里赋值(以达到动态效果),不过需要把数据处理成以上格式字符串
var pp = tmpdate.split(";");
//document.write(pp.length-1);
for(var m=0;m<document.form1.pro_type2.options.length;m++) document.form1.pro_type2.options[m]=null;
//不知为什么,有时候一次清不完原列表数据,所以下面有可能再来处理一次(如果列表数据太多一次清不完,请将注释打开应该可以了)
//for(var m=0;m<document.form1.pro_type2.options.length;m++) document.form1.pro_type2.options[m]=null;
for (var i=0; i<(pp.length-1); i++ ){
var tt=pp[i].split(",");
if(tt.length>=2){
for (var j=1; j<(tt.length-1); j++){
if(tt[0]==thisvalue){
var dd=tt[j].split("#");
document.form1.pro_type2.options[j]= new Option( dd[1], dd[0]);
}
}
}else{
for(var m=0;m<document.form1.pro_type2.options.length;m++) document.form1.pro_type2.options[m]=null;
}
document.form1.pro_type2.options[0]= new Option("=选择二级类别=","0");
}
document.form1.pro_type2.selectedIndex=0; //设置默认选项
}
</script>

<form name=form1>
<select name=por_type1 onChange="ChangeOptiontype(this.value);">
<option value="">=选择一级类别=</option>
<option value="一级分类A">一级分类A</option>
<option value="一级分类B">一级分类B</option>
</select>
<select name="pro_type2">
<option value="0">=选择二级类别=</option>
</select>
</form>



PHP代码:




<HTML><HEAD>

<
TITLE>无标题文档</TITLE>

<
META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312">

<
STYLE TYPE="text/css"><!--

BODY, TD, SELECT{FONT-SIZE:9pt; FONT-FAMILY:"宋体";}

--></
STYLE>

<
script language="javascript" defer>

var
aData1 = new Array();

aData1[0] = ['北京', '北京一|1', '北京二|2', '北京三|3'];

aData1[1] = ['上海', '上海一|4', '上海一|5', '上海一|6'];

aData1[2] = ['深圳', '深圳一|7', '深圳一|8', '深圳一|9'];

var
aData2 = new Array();

aData2[0] = ['电脑', '电脑一|1', '电脑一|2', '电脑一|3'];

aData2[1] = ['冶金', '冶金一|4', '冶金一|5', '冶金一|6'];

aData2[2] = ['建筑', '深圳一|7', '深圳一|8', '冶金一|9'];

/*

数据格式如上,可以自行用后台生成该数组.如:

'北京一|1'

"|"号前面是文本,之后则是对应的VALUE.

*/



/*该程序以封装,自行按需要修改,扩展.*/

function TowSelect(){

this.Dadas='';

this.objSEL1=form1.s1;

this.objSEL2=form1.s2;

this.Window_Onload=function(){ //初始化北京地区数据

for (var i=0; i<this.Dadas.length; i++){

this.objSEL1.options.add(new Option(this.Dadas[i][0], i));

}

this.Select_Select(0);

};

this.Select_Select=function(v){ //用于按S1传过来的值初始S2的列表

this.objSEL2.options.length = 0;

for (var
i=1; i<this.Dadas[v].length; i++)

this.objSEL2.options.add(new Option(this.Dadas[v][i].split('|')[0], this.Dadas[v][i].split('|')[1]));

};

this.getValue=function(){ //获取S1和S2的所选定的值

return {

S1Value: this.objSEL1.value,

S2Value: this.objSEL2.value,

S1Text: this.objSEL1.options[this.objSEL1.selectedIndex].text,

S2Text: this.objSEL2.options[this.objSEL2.selectedIndex].text

}

};

};

var
TS=new TowSelect(); //实例化地区数据

TS.Dadas=aData1;

TS.Window_Onload();



var
TE=new TowSelect(); //实例化专业数据

TE.Dadas=aData2;

TE.objSEL1=form1.e1;

TE.objSEL2=form1.e2;

TE.Window_Onload();

</script>

</HEAD>



<BODY bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="50">

<center>

<form name="form1">

<DIV>

<select name="s1" size="1" onChange="TS.Select_Select(this.value);"></select>

<select name="s2" size="1"></select>

<input type="button" value="显示当前选定的value" onclick="alert('S1='+TS.getValue().S1Value+' , S2='+TS.getValue().S2Value)" />

<input type="button" value="显示当前选定的text " onclick="alert('S1='+TS.getValue().S1Text+' , S2='+TS.getValue().S2Text)" />

</DIV>

<br /><br /><br />

<DIV>

<select name="e1" size="1" onChange="TE.Select_Select(this.value);"></select>

<select name="e2" size="1"></select>

<input type="button" value="显示当前选定的value" onclick="alert('E1='+TE.getValue().S1Value+' , E2='+TE.getValue().S2Value)" />

<input type="button" value="显示当前选定的text " onclick="alert('E1='+TE.getValue().S1Text+' , E2='+TE.getValue().S2Text)" />

<DIV>

</form>

</center>

</BODY>

</HTML>



让我们在交流中成长
2006-01-11 11:03
wleige
Rank: 1
等 级:新手上路
帖 子:59
专家分:0
注 册:2005-10-10
收藏
得分:0 

其实应该说是把PHP变量的值输出来,并不是变量之间的传递.
他们之间不可能相互调用.
如<script language="javascript">
var str=<? echo $str;?>
</script>


我一直以为隐身了别人就找不到我了!没有用的!象我这样拉风的男人,无论在什么地方,都像漆黑中的萤火虫一样,那样的鲜明,那样的出众!我那忧郁的眼神,稀嘘的胡喳子,神乎其神的刀法,还有那杯drymartine,都深深地出卖了我......
2006-01-11 12:06
flyingpig
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-1-10
收藏
得分:0 

那我想这么实现时不可能了吗?有没有其他的办法啊?


祈求上苍让我聪明起来!
2006-01-11 14:03
快速回复:关于php与javascript相互嵌套使用实现三级菜单联动
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.047101 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved