求助,怎么设置级联下拉列表?

照着http://www.yiiframework.com/doc/cookbook/24/

做了一个,但是到调用ajax的时候没有反应。

<div class="row">

	&lt;?php echo CHtml::activeLabelEx(&#036;model,'country'); ?&gt;  


	


	&lt;?php echo CHtml::dropDownList('country','',Lookup::items('country'),


	array('ajax' =&gt; array(


		'type'=&gt;'POST', //request type


		'url'=&gt;dynamiccities',  //url to call


		'update'=&gt;'#city', //selector to update


		//'data'=&gt;'js:javascript statement' 


		//leave out the data key to pass all form values through


	))); ?&gt;


	&lt;?php echo CHtml::error(&#036;model,'country'); ?&gt;

</div>

<div class="row">

	&lt;?php echo CHtml::activeLabelEx(&#036;model,'city'); ?&gt;


	


    echo CHtml::dropDownList('city','', array());


	


	&lt;?php echo CHtml::error(&#036;model,'city'); ?&gt;


&lt;/div&gt;

跟例子的不同就是在上级菜单取下拉列表的值的时候使用了blogdemo提供的lookup的items方法从数据库中取数,但是在一级列表变换的时候却感觉没有调用url指示的action动作。不知道是怎么回事。请大家不吝赐教。

或者有能运行的代码让我参考一下,谢谢。

我补充一下,这个在firefox下work了,但是ie不行,这是咋回事?

我的Controller文件的action

public function actionDynamiccities()


{


//var_dump(&#036;_POST['country']);	


&#036;data=Lookup::model()-&gt;findAll(array(


        'condition'=&gt;'type=:type',


		'params'=&gt;array(':type'=&gt;(int)&#036;_POST['country']),


		'order'=&gt;'position',));








&#036;data=CHtml::listData(&#036;data,'code','name');


foreach(&#036;data as &#036;value=&gt;&#036;name)


{


    echo CHtml::tag('option',


               array('value'=&gt;&#036;value),CHtml::encode(&#036;name),true);


}





}

<div class="row">

	&lt;?php echo CHtml::activeLabelEx(&#036;model,'country'); ?&gt;  


	


	&lt;?php echo CHtml::DropDownList('country','',Lookup::items('country'),


	array('ajax' =&gt; array(


		'type'=&gt;'POST', //request type


		'url'=&gt;CController::createUrl('address_book/dynamiccities'),  //url to call


		'update'=&gt;'#address_book_city', //selector to update


		//'data'=&gt;'js:javascript statement' 


		//leave out the data key to pass all form values through


	))); ?&gt;


	&lt;?php echo CHtml::error(&#036;model,'country'); ?&gt;


&lt;/div&gt;

是可以联动的,但是由于没用activeDropdownlist,所以没法提交到$model中去

但是如果把这个改为<?php echo CHtml::activeDropDownList($model,‘country’,Lookup::items(‘country’),

这样就会出问题,最明显的问题就是取不到下级数据了,在actionDynamiccities()里看,$_POST[‘country’]是空的,这是怎么回事?又想级联又想提交这个怎么解决?谢谢大家

我也有同样的问题,按照http://www.yiiframework.com/doc/cookbook/24/做了这后,二级列表框刷新但是没数据。

怎么没人回答,qiang也没反应

用activeDropDownList,在action中

‘params’=>array(’:type’=>(int)$_POST[‘country’]),

改为

‘params’=>array(’:type’=>(int)$_POST[‘YourModelName’][‘country’]),

就可以接收到参数了

刷新了但是没数据的话,先用firebug检查一下action的响应看是否正确的返回了数据。

我现在的级联下拉列表在ie7下也有一些问题,正好也发这里吧。

我的级联下拉列表现在ie6,ie8和firefox下都很正常。

问题发生在ie7里,cat_1和cat_2两个select,当我选cat_1中的option时也正常的取回数据并正确的update到cat_2中了,但是在浏览器里有时不刷新,还显示原来的数据,感觉像是ie7刷新的慢一样(注意是有时,感觉基本上我点3次cat_1时有1次cat_2不更新,刚又确认了一下,不是慢,是有时就不更新,等了十几秒也没更新),但当我把鼠标移到更新区域时就立刻刷新成正确的内容了。

注意我说的不更新是cat_2的值已经变化,但在ie7里不显示新的值而是老的,但鼠标移过去就变成新的了。

非常诡异…

可以work了,非常感谢!!!

这个问题时候我也遇到过,就是多浏览器一起试用的时候。我一般都把webroot下的assets文件夹底下的东西给删了再重新试,一般就都能行了。好像Yii把js,css文件什么的都存在这儿了,有可能没有及时更新。

试了一下,还是只有ie7不行,还是时灵时不灵,但如果鼠标移过去肯定刷新,真奇怪

终于找到解决的办法了,是ie7的bug,把它hide一下然后再show一下能正常显示了,算是强制刷新了一下


'success':function(html){

                jQuery("#cat_2").html(html).hide().show();

            }

很无奈啊…