我对Yii框架有疑问。
假设我有下拉列表,如下面列出的代码。
我需要打印选定的值,我尝试使用$_POST['countries']
但什么都没发生。
我只需要将所选值存储在变量中,以便我可以操作它。
<?php
echo CHtml::dropDownList('countries', $select = array(),
CHtml::listData($countries, 'code', 'name'));
?>
答案 0 :(得分:3)
$_POST
var对应于使用HTTP protocol
发送的一些数据,因此要使用此var,客户端(浏览器)需要将数据发送到服务器。
由于您希望在用户在下拉列表中选择一个值后显示某些内容,因此您需要使用在客户端执行的javascript。
这是一个使用jquery获取所选值的示例。然后你应该更新你想要显示值的div,但是因为它不在你的问题中我无法帮助!
$('#dropDownId').change(function(){
var value = $('#dropDownId :selected').text();
//Here update the div where you need to see the selected value
});
其中dropDownId
是您需要为dropDownList提供的ID(在CHtml::dropDownList html options中)
答案 1 :(得分:2)
您还可以使用Ajax请求。如果你想制作一些依赖的下拉列表,它会更好。 例如:
echo $form->dropDownList($profile, $field->varname,CHtml::listData(Countries::model()->findAll(),'short','title'), array(
'class'=>"chzn-select",
'empty'=>"Select country",
'ajax' => array(
'type' => 'POST',
'url'=>$this->createUrl('registration/state'),
'update' => '#Profile_state',
'data'=>array('country'=>'js:this.value',),
'success'=> 'function(data) {
$("#Profile_state").empty();
$("#Profile_state").append(data);
$("#Profile_state").trigger("liszt:updated");
} ',
)));
然后在你的控制器中你可以使用POST 例如:
public function actionState()
{
$data=Regions::model()->findAll('country_code=:country_code',
array(':country_code'=> $_POST['country']));
echo "<option value=''>Select state</option>";
$data=CHtml::listData($data,'region_code','region_title');
foreach($data as $value=>$state) {
echo CHtml::tag
('option', array('value'=>$value),CHtml::encode($state),true);
}
}