6

フォームの作成と更新に単一のフォームを使用しています。次のフォームでデフォルトでチェックボックスをオンにする必要があります

<div class="row" style='float:left;;margin-left:5px'>
        <?php echo '<span for="label" style="margin-bottom:5px;font-size: 0.9em;font-weight: bold;">Label</span><br />'; ?>
        <?php echo $form->checkBox($model,'label_name',array('value'=>1,'uncheckValue'=>0,'checked'=>'checked','style'=>'margin-top:7px;')); ?>
        <?php echo $form->error($model,'label_name'); ?>
    </div>

上記のコードを使用して同じ目的を達成していますが、期待どおりの結果が得られません。フォームの更新中に、チェックされていないにもかかわらず、チェックされていることが示されます

4

5 に答える 5

9

私はコード自体で作業した解決策を得ました。見てください

<div class="row" style='float:left;;margin-left:5px'>
        <?php echo '<span for="label" style="margin-bottom:5px;font-size: 0.9em;font-weight: bold;">Label</span><br />'; ?>
        <?php echo $form->checkBox($model,'label_name',array('value'=>1,'uncheckValue'=>0,'checked'=>($model->id=="")?true:$model->label_name),'style'=>'margin-top:7px;')); ?>
        <?php echo $form->error($model,'label_name'); ?>
    </div
于 2013-04-26T07:14:28.953 に答える
4

より良い解決策は、コントローラーで値を設定することです。

public function actionCreate() {
    $model = new ModelName();

    if (isset($_POST[$model])) {
        // ... save code here
    }
    else {
        // checkboxes for label 'label_name' with value '1' 
        //   will be checked by default on first load
        $model->label_name = true; // or 1
    }

    $this->render('create', array(
        'model' => $model,
    ));
}

またはさらに良いafterConstruct()ことに、モデルの関数で:

protected function afterConstruct() {

    parent::afterConstruct();

    $this->label_name = true; // or 1
}
于 2013-04-26T07:26:07.393 に答える
2

以下のリンクに従ってください

http://www.bsourcecode.com/2013/03/yii-chtml-checkboxlist

リンクがお役に立てば幸いです。

于 2013-12-03T12:28:00.977 に答える
1

必要なのは、モデルにデフォルト値を設定することだけです:

public $label_name = true;
于 2013-04-26T11:09:37.457 に答える
0

要件は、作成と更新の両方でチェックボックスをオンにしておくことです。checked=checked はフォームの作成時に目的を果たしますが、更新時にはコードで処理する必要があります

于 2013-04-26T07:08:29.647 に答える