lionel1022 2012-09-07 10:05:31 4042次浏览 5条回复 2 0 0

在论坛上看到有二级联动,但是如何实现三级联动呢。。。 我自己根据哪个二级联动修改了个三级联动,但是有点问题。。。选择第一级的时候第二级可以出来,但是三级不能自己出来,必须要再点击二级后,三级才能出来。如何点击一级的时候,二级,三级能自动显示出来。 附代码: html:

<?php
echo CHtml::dropDownList('country_id','', 
array('0'=>'请选择',1=>'USA',2=>'France',3=>'Japan'),
array(
    'ajax' => 
    array(
        'type'=>'POST', //request type
        'url'=>Yii::app()->createUrl('site/dynamiccities'),
        'update'=>'#city_id', //selector to update
        )
    )
);
echo CHtml::dropDownList('city_id','', array('empty'=>'你想要的值'), array(		 
    'ajax' => 
    array(
        'type'=>'POST', //request type
        'url'=>Yii::app()->createUrl('site/dynamiccities1'),
        'update'=>'#city_id1', //selector to update
    )
));
echo CHtml::dropDownList('city_id1','', array("请先选择国家1"));
?>

php:

public function actionDynamiccities()
{
    //$data=Location::model()->findAll('parent_id=:parent_id', 
    //array(':parent_id'=>(int) $_POST['country_id']));

    //为测试方便没有使用数据库支持,使用数据库请参看上面注释掉的代码。
    $list=array(
        1=>array(
            array("id"=>1,"name"=>"测试1"),
            array("id"=>2,"name"=>"测试2")
        ),
        2=>array(
            array("id"=>3,"name"=>"测试3"),
            array("id"=>4,"name"=>"测试4")
        ),
        3=>array(
            array("id"=>5,"name"=>"测试5"),
            array("id"=>6,"name"=>"测试6")
        ),
    );
    if(isset($list[$_POST['country_id']])) {
        $data=$list[$_POST['country_id']];
    }else{
        $data=array(
            array("id"=>0, "name"=>"请先选择国家111"),
        );
    }



    $data=CHtml::listData($data,'id','name');
    foreach($data as $value=>$name)
    {
        echo CHtml::tag('option',
        array('value'=>$value),CHtml::encode($name),true);
    }
}

public function actionDynamiccities1()
{
    //$data=Location::model()->findAll('parent_id=:parent_id', 
    //array(':parent_id'=>(int) $_POST['country_id']));

    //为测试方便没有使用数据库支持,使用数据库请参看上面注释掉的代码。
    $list=array(
        0=>array(),
        1=>array(
            array("id"=>1,"name"=>"测试测试11"),
            array("id"=>2,"name"=>"测试测试12"),
            array("id"=>3,"name"=>"测试测试13")
        ),
        2=>array(
            array("id"=>3,"name"=>"测试测试1测试13"),
            array("id"=>4,"name"=>"测试测试1测试14")
        ),
        3=>array(
            array("id"=>5,"name"=>"测试1测试5"),
            array("id"=>6,"name"=>"测试1测试6")
        ),
    );
    if(isset($list[$_POST['city_id']])) {
        $data=$list[$_POST['city_id']];
    } else {
        $data=array(array("id"=>0, "name"=>"请先选择国家"),);
    }

    $data=CHtml::listData($data,'id','name');
    foreach($data as $value=>$name)
    {
        echo CHtml::tag('option',array('value'=>$value),CHtml::encode($name),true);
    }
}

求解决。。。

  • 回复于 2012-09-07 10:24 举报
  • 回复于 2012-09-07 10:26 举报

    呵呵,已经参考了。。。。研究了很久。。。

  • 回复于 2012-09-07 16:03 举报

    你在第一个dropdownLIst里不要update,换成sucess =>'js:callback',然后在这个callback函数中写方法,调用ajax成功以后每个dropdownLIst里该显示什么

  • 回复于 2012-09-07 16:07 举报

    给你个例子:

    function callback(data)
    {
        $("#residecity").empty();
        $("#residecity").append(data);
        var pcid = $("#residecity").val();
        $.get("/site/dynamiccity/pcid/"+pcid,function(result){
            $("#residedist").empty();
            $("#residedist").append(result);
        });
    }
    

    #residecity 这个是第二个dropdownlist的id ,#residedist是第三个的dropdownlist的id

  • 回复于 2013-12-19 15:05 举报

    http://www.yiichina.com/user/4671 猫咪兔 大哥 你误人子弟啊· · 'success' =>'js:callback', 应该是这样的说 你少打了一个c··· 不过三级联动是搞定了

您需要登录后才可以回复。登录 | 立即注册