2013-04-16 40 views
1

我有一个关于Yii框架的问题。从CHtml获取选定值:: dropDownList

比方说,我有像下面列出的代码下拉列表。

我选中需要打印的价值,我尝试用$_POST['countries'] ,但什么也没发生这样做。

我只需要选定的值存储在一个变量,所以我可以操纵它。

<?php 
     echo CHtml::dropDownList('countries', $select = array(), 
     CHtml::listData($countries, 'code', 'name')); 
?> 
+0

你要按下提交按钮或只是用户选择它后后打印选择的价值?在一种情况下,因为你在使用php和其他javascript! – darkheir

+0

用户选择它之后。 – 5ome

回答

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是,你需要给你的下拉列表(在CHtml::dropDownList html options

+0

你可以使用.on('change',..);以及 –

+0

@darkheir,非常感谢你的回答,接受答案) – 5ome

2

你也可以使用一个Ajax请求的ID。它更好,如果你想做一些依赖下拉列表。 例如:

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); 
        } 

} 
相关问题