2013-12-07 82 views
0

我有2 DROPDOWNLIST 第一個DropDownList是小時 二DROPDOWNLIST是時限依賴小時如何使用yii框架中的Ajax請求更新Dropdownlist?

例如 如果小時中選擇8分鐘盒具有30 - 60 如果小時中選擇13分鐘盒具有00 - 60

我用ajax請求但不工作。

代碼顯示如下

的index.php

<?php 
$this->breadcrumbs=array(
    'Book', 
); 
?> 

<?php $form=$this->beginWidget('bootstrap.widgets.TbActiveForm', array(
    'id'=>'test', 
    'type'=>'horizontal', 
    'enableClientValidation'=>true, 
    'clientOptions'=>array(
     'validateOnSubmit'=>true, 
    ), 
)); ?> 

    <div class="row"> 

     <?php 
     echo $form->dropDownList($model, 'C_time',$this->HH(), array('empty' => 'Select Hour ', 
       'ajax' => array(
        'type'=>'POST', 
        'url'=>CController::createUrl('CustomersController/MM'), 
        'update'=>'#Minute', 
        'data'=>array('hour' => 'js:this.value'), 
       ), 
      ) 
     ); 
     echo CHtml::dropDownList('Minute','', array('empty'=>'Select Minute')); 
     ?> 
    </div> 

<?php $this->endWidget(); ?> 

CustomerController

public function actionIndex() { 
    $model = new Customers();   
    $this->render('index',array('model'=>$model)); 
} 

public function HH() 
{ 
    $r_model = new Restaurant(); 
    $par1 = 'HOUR'; 
    $par2 = 'R_open'; 
    $open = $r_model->getTime($par1,$par2); 
    $par2 = 'R_close'; 
    $close = $r_model->getTime($par1,$par2); 
    $rs = array(); 
    for ($i = $open; $i < $close; $i++){ 
     $rs[$i] = $i; 
    } 
    return $rs; 
} 

public function actionMM() 
{ 
    if(isset($_POST['hour']) && $_POST['hour']!=''){ 
     $this->render('test'); 
     $hour=$_POST['hour']; 
     $r_model = new Restaurant(); 
     $start = '00'; 
     $end = '60'; 
     if($hour == $r_model->getTime('HOUR','R_open')){ 
      $par1 = 'MINUTE'; 
      $par2 = 'R_open'; 
      $open = $r_model->getTime($par1,$par2); 
      $start = $open; 
     } 
     elseif($hour == $r_model->getTime('HOUR','R_close')){ 
      $par1 = 'MINUTE'; 
      $par2 = 'R_close'; 
      $close = $r_model->getTime($par1,$par2); 
      $end = $close; 
     } 
     $rs = array(); 
     for ($i = $start; $i < $end; $i++){ 
      $rs[$i] = $i; 
     } 
     echo CHtml::tag('option',array('value' => ''), 
      CHtml::encode('Select User Type'),true); 
     foreach($rs as $id) 
     { 
      echo CHtml::tag('option', 
       array('value' => $id),CHtml::encode($id),true); 
     } 
    } 
} 

回答

0

你不需要阿賈克斯爲!

第一初始第一下拉用的所有選項,然後第二個下拉(分鐘)用空選項,

然後取決於第一下拉,填充第二,如:

<div class="row"> 
    <?php 
    echo $form->dropDownList( 
      $model, 'C_time',$this->HH(), array('empty' => 'Select Hour ', 
      'id' => 'drpHour', // give it an id so we can select it 
     ) 
    ); 
    echo CHtml::dropDownList('Minute','', $data , array('empty'=>'Select Minute', 'id' => 'drpMinute')); 
    ?> 
</div> 

<script> 
$(document).ready(function(){ 
     $('#drpHour').change(function(){ // depending on your logic, fill the second drop down 
      if($('#drpHour').val() > 13){ 
        $('#drpMinute').append('<option value="30" >30</option>');// and fill the rest 
      ... 
      } 
      else{ ... } 

     }); 

}); 
+0

但分鐘取決於時間是在數據庫中,可以使用這個代碼嗎? – KenjiSoul

+0

在第一次下拉式的變化中,而不是像我這樣分配,你必須做一個Ajax請求並獲取你的數據,然後把它分配給 – tinybyte

+0

對不起!你可以給我代碼嗎?我不知道如何實現代碼。 – KenjiSoul