Группа радиокнопок в отдельном месте в 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 для значения.

Кто-нибудь нашел решение для этого?


person Robert Limanto    schedule 11.12.2015    source источник
comment
Я не понял вашего вопроса, какую функциональность вы хотите использовать с помощью радиоблока.   -  person Amitesh Kumar    schedule 11.12.2015
comment
Привет @AmiteshKumar, спасибо за ответ, я хочу разделить две кнопки в разных местах 1-й ряд, да 2-й ряд, нет без использования радиосписка   -  person Robert Limanto    schedule 11.12.2015
comment
в вашем коде вы используете три переключателя 1 для да 2 для нет, тогда в чем проблема?   -  person Amitesh Kumar    schedule 11.12.2015
comment
проблема в том, что если я использую приведенный выше код, я не могу получить значение, независимо от того, что я нажму (да или нет), я получу 0 значение   -  person Robert Limanto    schedule 11.12.2015
comment
да, он всегда будет показывать вам ноль.   -  person Amitesh Kumar    schedule 11.12.2015
comment
тогда что мне делать? мне нужно получить значение, которое равно 1 или 0 TT   -  person Robert Limanto    schedule 11.12.2015
comment
Давайте продолжим обсуждение в чате.   -  person Robert Limanto    schedule 11.12.2015
comment
Привет @RobertLimanto: вы можете попробовать мой код. Это работает нормально. Я проверил.   -  person Nana Partykar    schedule 11.12.2015


Ответы (4)


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 да или нет. Вы, кажется, начали делать это!

person Joe Miller    schedule 11.12.2015
comment
Я изменил свой ответ. Я проверил это в своем ide, и все работает нормально, но обратите внимание на мой комментарий о наличии трех переключателей в вашей форме. - person Joe Miller; 11.12.2015
comment
Я действительно протестировал программу с помощью 6 кнопок, она будет работать? - person Robert Limanto; 11.12.2015
comment
как я могу сделать это для более чем 2 кнопок? - person Robert Limanto; 11.12.2015
comment
@RobertLimanto Я все еще пытаюсь разобраться, это не кажется таким интуитивным, как я думал. Я думаю, что я неправильно понял что-то основное о том, как они работают. Я постараюсь вернуться к вам с некоторыми дальнейшими исследованиями для вашего варианта использования. Это головоломка! - person Joe Miller; 11.12.2015
comment
@RobertLimanto Я расширил свой ответ, основываясь на некоторых работах, которые я делал сегодня днем. Надеюсь, поможет! - person Joe Miller; 13.12.2015
comment
это не пройдет проверку модели, я пробовал это в своей программе, и это не работает - person Robert Limanto; 18.12.2015
comment
я как бы поставил ['work_part_time'], требуется в типовой форме - person Robert Limanto; 18.12.2015

Я лично проверил ваш код в своей системе. Этот код возвращает 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
person Nana Partykar    schedule 11.12.2015
comment
Привет, я не хочу использовать список радио, потому что я хочу разделить оба радио в разных местах. - person Robert Limanto; 11.12.2015

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

<?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, это будет работать.

person Amitesh Kumar    schedule 11.12.2015
comment
Спасибо, Кумар, это все еще не работает ‹?= $form-›field($model, 'firstgradescore')-›radio(['label' =› false, 'value' =› '1' , 'uncheckValue' =› null])?› ‹?= $form-›field($model, 'firstgradescore')-›radio(['label' =› false, 'value' =› '2' , 'uncheckValue' =› null]) ?› я использую yii2, поэтому я сделал это как yii2 - person Robert Limanto; 11.12.2015

Если вы замените «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);
?>

Спасибо за отличный ответ, Джо Миллер.

person Bumbuli    schedule 01.04.2017