簡體   English   中英

在yii中創建一個依賴下拉列表

[英]Creating a dependent dropdown in yii

我正在嘗試有關創建依賴下拉列表的示例 ,我在provinceCity / _form中創建了表單,並將actionDynamiccities復制到ProvinceCityController.php,但是當我更改dropDown列表時,我沒有任何更改嗎? 我認為我必須啟用Ajax,但我不怎么做?

<?php echo CHtml::dropDownList('country_id','', array(1=>'USA',2=>'France',3=>'Japan'),
array(
'ajax' => array(
'type'=>'POST', //request type
'url'=>CController::createUrl('ProvinceController/dynamiccities'), //url to call.
//Style: CController::createUrl('ProvinceCity/methodToCall')
'update'=>'#city_id', //selector to update
//'data'=>'js:javascript statement' 
//leave out the data key to pass all form values through
))); 

//empty since it will be filled by the other dropdown
echo CHtml::dropDownList('city_id','', array()); ?>

這是您將在_form中執行的操作

     <?php echo CHtml::dropDownList('country_id','', array(1=>'USA',2=>'France',3=>'Japan'),
    array(
    'ajax' => array(
    'type'=>'POST', //request type
    'url'=>CController::createUrl('ProvinceController/dynamiccities'), //url to call.
    'update'=>'#city_name', //selector to update
    'data'=>array('country_id' => 'js:this.value'), 

    ))); 
        ?>
</div>
<div id=city_name>
<?php echo $form->dropDownList($model, 'city_id', array()); ?>

</div>

希望對您有幫助。

它應該是,

        <?php 
        $countryAry=array(1=>'USA',2=>'France',3=>'Japan');
        echo CHtml::dropDownList('country_id','', $countryAry,
                array
                (
                    'ajax' => array
                    (
                        'type'=>'POST',
                        'url'=>CController::createUrl('Controller/action'),
                        'dataType'=>'JSON',
                        'success'=>'js:function(data)'
                        . '{'
                        . '     var opt="<option value=>-----Select city-----</option>";'
                        . '     $.each(data,function(i,obj)'
                        . '     {'
                        . '         opt+="<option value=\'"+obj.id+"\'>"+obj.name+"</option>";'
                        . '     });'
                        . '     $("#city_id").html(opt);'
                        . '}'
                    )
              )); 

        echo CHtml::dropDownList('city_id','', array());
        ?>

但是,我建議您像下面這樣執行此任務。

        <?php 
        $countryAry=array(1=>'USA',2=>'France',3=>'Japan');
        echo CHtml::dropDownList('country_id','', $countryAry,array('onchange'=>'js:getCities()')); 
        echo CHtml::dropDownList('city_id','', array());
        ?>


        <script type="text/javascript">
        function getCities()
        {
            $.ajax
            ({
                type:'POST',
                url:'Controller/action',
                dataType:'JSON',
                success:function(data)
                {
                     var opt="<option value=>-----Select city-----</option>";
                     $.each(data,function(i,obj)
                     {
                         opt+="<option value='"+obj.id+"'>"+obj.name+"</option>";
                     });
                     $("#city_id").html(opt);
                }
            });
        }
        </script>

在yii中的從屬下拉列表中找到了解決方案

<?php 
$model=new ModelClass; // initilize it in controller
$form=$this->beginWidget('CActiveForm', array(
'id'=>'dependent-form',
'enableClientValidation'=>true,
'htmlOptions' => array('enctype' => 'multipart/form-data','autocomplete'=>'off'),
'clientOptions'=>array(
    'validateOnSubmit'=>true,

)
)); 
?>
<div class="row">
<?php                                   
  echo $form->dropDownList($model,'country_id', 
  CHtml::listData(Countries::model()->findAll(), 'id', 'title'),
  array(
    'prompt'=>'Select Country',
    'ajax' => array(
    'type'=>'POST', 
    'url'=>Yii::app()->createUrl('YourController/loadstates'), //  get states list
    'update'=>'#ModelClass_state_id', // add the state dropdown id
  'data'=>array('country_id'=>'js:this.value'),
  ))); 
?>  
</div>
<div class="row">
<?php                                   
  echo $form->dropDownList($model,'state_id', 
  array(),
  array(
    'prompt'=>'Select State',
    'ajax' => array(
    'type'=>'POST', 
    'url'=>Yii::app()->createUrl('YourController/loadcities'), //  get states list
    'update'=>'#ModelClass_city_id', // add the state dropdown id
  'data'=>array('state_id'=>'js:this.value'),
  ))); 
?>  
</div>
<div class="row">
<?php                                   
  echo $form->dropDownList($model,'city_id',array(),array('empty'=>'-choose city-')); 
?>  
</div>

  <?php echo CHtml::submitButton($model->isNewRecord ? 'Add' : 'Update',array('class'=>'btn btn-primary')); ?>
<?php $this->endWidget(); ?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM