求问连动下拉框问题

时间:2022-11-21 19:34:43
使用了数据库+javascript实现下拉框的方法,但是有一个问题,不知大家如何解决的,就是表单提交后,如果发生错误返回上一页,那么上一页的第一级的下拉框中的数据会保留,但是第二级的就没有了,而且第二级没有了选项,需要重新操作第一级下拉框,第二级中才有数据可以选择。

同样的,如果有一张修改页面,从数据库中读出的值可以让第一级下拉框中相应的值被选中,但是第二级如何让它被选中呢?而且现在的情况是如果第一级不重新操作,第二级中是没有数据可以选择的。

请各位指教,下面是我用的代码:

<? 
$sql="select * from suburb order by name asc"; 
$query=mysql_query($sql, $DB->link); 
?> 
<script language = "JavaScript"> 

var onecount; 
onecount = 0; 
subcat = new Array(); 
<? 
$count=0; 
while($rs=mysql_fetch_array($query)){ 
?> 
subcat[<?=$count;?>] = new Array("<?=$rs['id'];?>","<?=$rs['cityid'];?>","<?=$rs['name'];?>"); 
<? 
$count++; 

?> 
onecount=<?=$count?>; 

function getCity(cityid) 

document.form1.ADDTHREE.length = 0; 

var cityid=cityid; 

var i; 
document.form1.ADDTHREE.options[0] = new Option('Select',''); 
for (i=0;i < onecount; i++) 

if (subcat[i][1] == cityid) 

document.form1.ADDTHREE.options[document.form1.ADDTHREE.length] = new Option(subcat[i][2], subcat[i][2]); 




</script>


<select name="ADDTHREE" class="style10" id="ADDTHREE">
                      <option value="0">Select</option>
                    </select> <FONT size=2 class="style18">地區</FONT> 
<select name="ADDFOUR" class="style10" id="ADDFOUR" onChange="getCity(document.form1.ADDFOUR.options[document.form1.ADDFOUR.selectedIndex].id);">
                      <option value="0">Select</option>
<? 
$sql1= "select * from city"; 
$query=mysql_query($sql1, $DB->link); 
$a=mysql_num_rows($query); 
while($rs1=mysql_fetch_array($query)){ 
?> 
<option id="<?=$rs1['id'];?>" value="<?=$rs1['name'];?>"><?=$rs1['name'];?></option> 
<? }?> 
                    </select><FONT size=2 class="style18">地域</FONT>

14 个解决方案

#1


加上一个隐藏域,里面就是二级的菜单的值。
然后根据隐藏域用JS控制一下,就是用onchange()对第一级进行一下类似于鼠标选中的操作。

#2


能说的稍微具体一点吗?对这个还没有很深的概念

#3


<input name="twodata" type="hidden" value="" 这里写onchange?>

#4


你这个做的不好,保存的是name,而判断是用id,修改的时候从数据库中取出name时,是没有id的,所以你要么根据name判断,要么不得不在循环一次options得到对应的id,

var defaultCity = '<?php echo $rs['twodata']?>';
window.onload=function(){
    getCity(defaultCity); //这里由于只能是name,所以判断的时候应该用name
}

#5


明白你的意思,是说function getCity(cityid) 这里我用的cityid,其实这个cityid是第一级下拉框中的值对应的id,而不是二级下拉框里面的值,这样二级下拉框的默认值还是没有被设定。

#6


<select name="Ftopicid" id="Ftopicid" onchange="这里你操作二级">
      <option value="">Choose Directory</option>
      <option value="1">1</option>
      <option value="2">2</option>
    </select>
      <input type="hidden" id="tempdir" value="{Ftopicid}">
  <script language="javascript">
  var td = document.all.tempdir.value;
  if( td ) {
    document.all.Ftopicid.value = td;
    document.all.onchange();
           }
  </script>

#7


If you use ajax to do this, you will find it's good.

#8


建议去查看www.pcauto.com.cn上面的汽车分类的联动,做的非常好,简单的js+数据库查询就完成了.支持无限级别的联动..

#9


该回复被版主删除

#10


ajax这种有参考吗?能够满足我的需求?

#11


现在出现了新的问题。。。

<input type="hidden" id="tempdir" value="">
<script language="javascript">
function get_value()
{
document.form1.tempdir.value = document.form1.ADDFOUR.options[document.form1.ADDFOUR.selectedIndex].id;
}
</script>
<script language="javascript">
var td = document.form1.tempdir.value;
if( td ) {
document.form1.ADDFOUR.value = td;
document.form1.onchange();
}
</script>

增加了一个隐藏域之后,的确可以记录了,但是二级菜单始终报错,没有值,我想是document.form1.onchange();这样之后,导致了系统认为二级菜单没有选中。

#12


顶顶

#13


搂主,能不能问下你的联动是如何实现的,用到了ajax吗?

#14


DING

#1


加上一个隐藏域,里面就是二级的菜单的值。
然后根据隐藏域用JS控制一下,就是用onchange()对第一级进行一下类似于鼠标选中的操作。

#2


能说的稍微具体一点吗?对这个还没有很深的概念

#3


<input name="twodata" type="hidden" value="" 这里写onchange?>

#4


你这个做的不好,保存的是name,而判断是用id,修改的时候从数据库中取出name时,是没有id的,所以你要么根据name判断,要么不得不在循环一次options得到对应的id,

var defaultCity = '<?php echo $rs['twodata']?>';
window.onload=function(){
    getCity(defaultCity); //这里由于只能是name,所以判断的时候应该用name
}

#5


明白你的意思,是说function getCity(cityid) 这里我用的cityid,其实这个cityid是第一级下拉框中的值对应的id,而不是二级下拉框里面的值,这样二级下拉框的默认值还是没有被设定。

#6


<select name="Ftopicid" id="Ftopicid" onchange="这里你操作二级">
      <option value="">Choose Directory</option>
      <option value="1">1</option>
      <option value="2">2</option>
    </select>
      <input type="hidden" id="tempdir" value="{Ftopicid}">
  <script language="javascript">
  var td = document.all.tempdir.value;
  if( td ) {
    document.all.Ftopicid.value = td;
    document.all.onchange();
           }
  </script>

#7


If you use ajax to do this, you will find it's good.

#8


建议去查看www.pcauto.com.cn上面的汽车分类的联动,做的非常好,简单的js+数据库查询就完成了.支持无限级别的联动..

#9


该回复被版主删除

#10


ajax这种有参考吗?能够满足我的需求?

#11


现在出现了新的问题。。。

<input type="hidden" id="tempdir" value="">
<script language="javascript">
function get_value()
{
document.form1.tempdir.value = document.form1.ADDFOUR.options[document.form1.ADDFOUR.selectedIndex].id;
}
</script>
<script language="javascript">
var td = document.form1.tempdir.value;
if( td ) {
document.form1.ADDFOUR.value = td;
document.form1.onchange();
}
</script>

增加了一个隐藏域之后,的确可以记录了,但是二级菜单始终报错,没有值,我想是document.form1.onchange();这样之后,导致了系统认为二级菜单没有选中。

#12


顶顶

#13


搂主,能不能问下你的联动是如何实现的,用到了ajax吗?

#14


DING