2013-01-14 49 views
0

問題:使用CActiveFormdropDownList我試圖讓它發佈更改時的選定值。但我不確定如何引用當前選定的下拉值?引用Yii中的Select下拉值

代碼迄今是:

$form->dropDownList($model,'condition',$model->getConditionOptions(), array('submit'=>array('theme/build','id'=>$model->id,'condition'=>''))); 

getConditionOptions返回下拉值的數組,「狀況」應該從該下拉列表選擇的值。

+1

你應該使用依賴下拉列表,這裏有一篇關於這個wiki的文章:http://www.yiiframework.com/wiki/24/creating-a-dependent-dropdown/ – DarkMukke

回答

1

不要僅指定一個屬性來獲取當前值 - 這會影響下拉的目的。

爲了得到一個下拉的電流值,在你的jQuery,使用jQuery的VAL:http://api.jquery.com/val/,如:

$("#DropDownID").val() 

編輯:你真正的問題似乎是如何有內容更新更改後下拉,取決於下拉的值。這將通過AJAX完成。 Yii提供一個特殊的AJAX陣列此例如爲:

$form->dropDownList($model, 
        'condition', 
        $model->getConditionOptions(), 
        array('submit'=>array('theme/build', 
          'id'=>$model->id, 
          'ajax'=>array('url'=>CController::createURL('controller/action'), 
             'data'=>'$("#' . $model->id . '")',         
             'update'=>'#otherID', //selector to update 
             ) 
            ) 
         ) 
        ); 

然後,在你的控制器端,你可以得到使用getParam值。請注意,無論您想要更新應該回顯,而不是使用渲染。

編輯2:如果你不想使用jQuery,只是重新加載整個頁面,你應該只提交形式,例如:

$form->dropDownList($model, 'condition', $model->getConditionOptions(), array('submit'=>CController::createURL('controller/action'))) 

然後在你的控制器,你會仍然使用getParam,然後渲染一個新頁面。

+0

我在哪裏可以放這個jQuery?我試圖設置一個控制器變量$ condition,並在每次值改變時使用下拉的值。 –

+0

@MichaelGruber更新了回覆以解決您的評論。請記住,JavaScript將運行客戶端,並且PHP將運行服務器端,所以通常情況下,您的控制器和javascript中不會有持久變量。 – ernie

+0

事情是我不確定Ajax是我想要的。我不想更新特定的div或任何我想實質上用傳入的新變量參數(下拉的值)重新加載頁面 –

0

我認爲你可以做到這一點的方法是這樣的:

//define your dropdownlist 
$form->dropDownList(
    $model, 
    'condition', 
    $model->getConditionOptions(), 
    //your ajax call 
    'ajax' => array( 
     'type' => 'POST', 
     'url' => 'theme/build'. 
     'data' => array(
      'id' => $model->id, 
      'condition' =>'js:jQuery(this).val()', //current value 
     ) 
); 

編輯: 要獲取當前選定的選項:

$('#dropbox').val(); 

$('#dropbox :selected').val(); 

爲了得到當前所選選項文字

$('#dropbox :selected').text();