web-dev-qa-db-ja.com

yii2の別の場所にあるラジオボタングループ

だから、私は別々の場所に2つのラジオボタンを置きたいと思っています。私は解決策を探していましたが、私の場合は不可能なラジオリストを使用することを誰もが提案しています。

このようにすると(work_part_timeボタン):(下)

<div class="row">
    <div class="col-sm-2">
        <?= $form->field($model, 'work_part_time')->radio(['label' => 'yes', 'value' => 1])?>
    </div>-

    <div class="col-sm-3">
        <?= $form->field($model, 'hour_week')->textInput(['type' => 'number', 'placeholder' => 'Hour/Week'])->label(false)?>
    </div>

    <div class="col-sm-3">
        <?= $form->field($model, 'part_time_rate')->textInput(['type' => 'number', 'placeholder' => 'rate/hour(SGD)'])->label(false)?> 
    </div>
</div>

<div class="form-group">
    <?= $form->field($model, 'work_part_time')->radio( [0 => 'No'])->label('No')?>
</div>
<hr>
<div class="row">
    <div class="col-sm-2">
        <?= $form->field($model, 'work_part_time')->radio(['label' => 'yes', 'value' => 1])?>
    </div>-

    <div class="col-sm-3">
        <?= $form->field($model, 'hour_week')->textInput(['type' => 'number', 'placeholder' => 'Hour/Week'])->label(false)?>
    </div>

    <div class="col-sm-3">
        <?= $form->field($model, 'part_time_rate')->textInput(['type' => 'number', 'placeholder' => 'rate/hour(SGD)'])->label(false)?> 
    </div>
</div>

<div class="form-group">
    <?= $form->field($model, 'work_part_time')->radio( [0 => 'No'])->label('No')?>
</div>
<hr>

値は0しか取得できません。

誰かがこれの解決策を見つけましたか?

5
Robert Limanto

Yiiは、保存されている属性の値に応じて、チェックされた値またはチェックされていない値をラジオボタンに割り当てます。したがって、値が0の場合、値が0のボタンがチェックされます。問題はYiiは自動的に生成されます。他の人が示唆しているように、同じフィールドに複数のラジオボタンが必要な場合は、これをnullに設定する必要があります。

ユーザーが別のボタンをオンにすると、同じ名前の他のすべてのラジオボタンがオフになります。属性の名前は、ボタンの作成時にYiiによって自動的に生成されます。ラジオボタンにこれらを試してください。

<?= $form->field($model, 'work_part_time')->radio(['label' => 'Option 1', 'value' => 1, 'uncheck' => null]) ?>
<?= $form->field($model, 'work_part_time')->radio(['label' => 'Option 2', 'value' => 0, 'uncheck' => null]) ?>
<?= $form->field($model, 'work_part_time')->radio(['label' => 'Option 3', 'value' => 2, 'uncheck' => null]) ?>
<?= $form->field($model, 'work_part_time')->radio(['label' => 'Option4', 'value' => 3, 'uncheck' => null]) ?>

各ボタンには異なる値が必要です。これは、レコードが保存されるときにフィールドに保存される値です。

チェックできるボタンは1つだけなので、例のように同じ値と同じ名前のボタンが複数ある場合は、セットの最後のボタンだけがチェックされます。私はこれを回避する方法を知りません。 <formgroup>を使用して、フォームを論理セクションに分割することをお勧めします。各セクションは、work_part_timeがyesかnoかに関するものです。あなたはこれを始めたようです!

11
Joe Miller

私は自分のシステムであなたのコードを個人的にチェックしました。このコードは0または1を返します(ラジオボタンの選択のそれぞれで)。正常に機能しています。あなたは私のコードを使うことができます。

以下のコードで、label as Work part timeまたはその他のコードを指定する場合は、->label('Work Part Time');を入力します。

.
. // Your code
<?= $form->field($model, 'work_part_time')->radioList([1 => 'yes', 0 => 'No'])->label('Work Part Time'); ?>  
.
. // Your code

そして

1) 'はい'をデフォルトでチェックラジオボタンとしてチェックする場合は、次のように割り当てる必要があります<?php $model->status_id = 1?>

.
. // Your code
<?php $model->status_id = 1?>
<?= $form->field($model, 'work_part_time')->radioList([1 => 'yes', 0 => 'No'])->label('Work Part Time'); ?> 
.
. // Your code

2) 'いいえ'をデフォルトでチェックラジオボタンとしてチェックする場合は、次のように割り当てる必要があります<?php $model->status_id = 0?>

.
. // Your code
<?php $model->status_id = 0?>
<?= $form->field($model, 'work_part_time')->radioList([1 => 'yes', 0 => 'No'])->label('Work Part Time'); ?>  
.
.//Your code
2
Nana Partykar

これを試して:

<?php echo $form->radioButton($model,'user_work_part_time',array('value'=>1,'uncheckValue'=>null)); 
$form->radioButton($model,'user_work_part_time',array('value'=>0,'uncheckValue'=>null)); 
?>

htmlOption配列に 'uncheckValue' => nullを追加すると機能します。

1
Amitesh Kumar

「uncheck」を「uncheckValue」に置き換えると、投票された回答が機能します。ただし、選択されている場合はリストの最後のラジオの値のみが投稿され、残りは0になります。それを機能させ、意図したとおりに選択した値を投稿するために、いくつかのJSコードを追加しました。それが将来の誰かを助けることを願っています。

<!-- Complete solution for Radio buttons on separate places Yii2 together with its JS function-->
<php use  yii\web\View; ?>
<?= $form->field($model, 'work_part_time')->radio(['label' => 'Option 1', 'value' => 1, 'uncheckValue' => null,'onChange'=>' if($(this).prop("checked")){ var radioValue = 1;$(this).val(radioValue); var radioName = "Model[work_part_time]"; RadioSelected(radioName,radioValue);}else{$(this).val("")};']) ?>
<?= $form->field($model, 'work_part_time')->radio(['label' => 'Option 2', 'value' => 0, 'uncheckValue' => null,'onChange'=>' if($(this).prop("checked")){ var radioValue = 0; $(this).val(radioValue); var radioName = "Model[work_part_time]"; RadioSelected(radioName,radioValue);}else{$(this).val("")};']) ?>
<?= $form->field($model, 'work_part_time')->radio(['label' => 'Option 3', 'value' => 2, 'uncheckValue' => null,'onChange'=>' if($(this).prop("checked")){ var radioValue = 2; $(this).val(radioValue); var radioName = "Model[work_part_time]"; RadioSelected(radioName,radioValue);}else{$(this).val("")};']) ?>
<?= $form->field($model, 'work_part_time')->radio(['label' => 'Option4', 'value' => 3, 'uncheckValue' => null,'onChange'=>' if($(this).prop("checked")){var radioValue = 3; $(this).val(radioValue);  var radioName = "Model[work_part_time]"; RadioSelected(radioName,radioValue);}else{$(this).val("")};']) ?>
<?php
//JS Function
$RadioONSeparatePlaceJS = <<<JS
function RadioSelected(radioName,radioValue)
{
   $('input[name="' + radioName + '"]').val(radioValue);
}

JS;
$this->registerJs($RadioONSeparatePlaceJS,View::POS_HEAD);
?>

素晴らしい答えをありがとうジョーミラー。

0
Bumbuli