2015-04-30 46 views
4

我想禁用某些文本框和下拉列表以防止用戶更改其值。但每當我嘗試時,它都不會收集/獲取特定禁用的文本字段或下拉列表的數據。Yii2沒有得到禁用的下拉列表或文本框的值

這是我的視圖,顯示我的下拉列表。這是一個for循環中:

echo $form->field($model1[$i], 'earning_item_id')->widget(Select2::classname(), [ 
    'data' => $earningslistData, 
    'options' => ['placeholder' => '', 'prevOptionID' => $model1[$i]->earning_item_id, 'prevOptionName' => $earningslistData[$model1[$i]->earning_item_id], 
        "name" => "EarningDetails[".$i."][earning_item_id]", "row_count1" => $i], 
    //'disabled' => true, 
    'pluginOptions' => [ 
     'allowClear' => true, 
     'label' => false 
    ] 
]); 

這是它看起來像沒有禁用它們:

enter image description here

然後,當我保存它,它看起來像這樣:

enter image description here

但是,當我禁用下拉列表時,它會給我這個:

enter image description here

我覺得全名來自於我的模型,但我不知道爲什麼:

public function getFullName() 
{ 
    return $this->user ? $this->user->fname . ' ' . $this->user->lname : 'Full Name'; 
} 

它去一樣,當我禁用文本框:

echo $form->field($model, 'user_id')->widget(Select2::classname(), [ 
    'data' => $listData, 
    'options' => ['placeholder' => 'Select a Staff'], 
    'disabled' => true, 
    'pluginOptions' => [ 
     'allowClear' => true, 
    ], 
])->label('Employee Name'); 

我爲表單域使用Kartik小部件。 有沒有辦法解決這個問題?請告訴我如何。

編輯

多虧了評論者下面我發現disabledreadonly之間的差異。由於它是一個下拉列表,這裏是我做的:

echo $form->field($model, 'user_id')->widget(Select2::classname(), [ 
    'data' => $listData, 
    'options' => ['placeholder' => 'Select a Staff', ], 
    'pluginOptions' => [ 
     'allowClear' => true, 
    ], 
])->label('Employee Name'); 

echo $form->field($model, 'user_id')->widget(Select2::classname(), [ 
    'data' => $listData, 
    'options' => ['placeholder' => 'Select a Staff', 'style' => 'display:none'], 
    'pluginOptions' => [ 
     'allowClear' => true, 
    ], 
])->label(''); 
+3

而不是禁用屬性嘗試readOnly = true – Chinmay

+2

您應該使用只讀,禁用字段將不會發送數據到服務器。您可以檢查此答案以獲取更多信息http://stackoverflow.com/a/7730719/1635676 –

+0

感謝您的回覆。在這個小部件中增加'readonly'將會是''readonly'=> true,'但它似乎不起作用。它仍然是可編輯的。似乎沒有任何改變。 – kaynewilder

回答

8

禁用html表單字段不會提交,問題不在於yii本身。在這種情況下,解決方案是將相同字段的兩個副本,其中一個作爲已禁用的副本,因爲您已包含在其中,另一個在原始副本之後隱藏了相同的值。

echo $form->field($model1[$i], 'earning_item_id')->hiddenInput()->label(''); 
+0

我會用與你一樣的想法來回答我自己的問題。謝謝!這裏是我的參考:http://stackoverflow.com/questions/368813/html-form-readonly-select-tag-input – kaynewilder