Группа радиокнопок в отдельном месте в yii2

Итак, я хочу, чтобы две радиокнопки были в отдельном месте, я пытался найти решение, и каждый предлагает использовать радиолист, что невозможно в моем случае.

Если я поставлю это так (кнопка 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

Решение

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]) ?>

Каждой кнопке нужно отдельное значение, и это значение будет сохранено в вашем поле при сохранении записи.

Может быть проверена только одна кнопка, поэтому, если у вас есть несколько кнопок с одинаковым значением и одним и тем же именем, как у вас, кажется, в ваших примерах, будет проверена только последняя из набора. Я не знаю, как обойти это. Я предлагаю вам использовать <formgroup> чтобы разделить вашу форму на логические разделы, каждый раздел, касающийся того, является ли work_part_time положительным или отрицательным. Вы, кажется, начали делать это!

10

Другие решения

Я лично проверил ваш код в моей системе. Этот код возвращает 0 или 1 (в зависимости от выбора переключателя). Работает отлично. Вы можете использовать мой код.

В приведенном ниже коде, если вы хотите дать этикетка как Работа неполный рабочий день или что-то другое, положить в ->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

попробуй это:

<?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));
?>

добавьте ‘uncheckValue’ => null в массиве htmlOption, он будет работать.

1

Если вы замените «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
По вопросам рекламы [email protected]