单选按钮组在yii2中的单独位置

时间:2015-12-11 04:40:23

标签: php yii2 active-form

所以,我希望在单独的地方有两个单选按钮,我一直在尝试搜索解决方案,每个人都建议使用放射学家,这在我的情况下是不可能的。

如果我这样说(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值。

有人找到了解决方法吗?

4 个答案:

答案 0 :(得分:10)

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是yes还是no有关。你似乎已经开始这样做了!

答案 1 :(得分:2)

我亲自检查了系统中的代码。此代码返回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)如果您想查看&#39;如默认选中单选按钮,则必须按此<?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)如果您想查看&#39;如默认选中单选按钮,则必须按此<?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 :(得分:1)

试试这个:

<?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数组中添加&#39; uncheckValue&#39; =&gt; null它将起作用。

答案 3 :(得分:0)

如果用“uncheckValue”替换“uncheck”,则表决的答案将起作用,除非它只会在列表中发布最后一个收音机的值(如果选中),其余为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);
?>

感谢Joe Miller的精彩回答。