依赖字段yii2

时间:2015-12-03 16:23:35

标签: yii2 field onchange

我在框架Yii2中需要2个依赖字段示例:

2 fields in ActiveForm

我希望当我插入" Numero de Personas" = 5或其他数值,自动" Consumo de Agua" = 2 *" Numero de Personas" = 10。 我看到了onchange yii2,但我不知道如何使用它,我认为onchange yii2是另一种选择。

<?= $form->field($model, 'NUM_PERSONAS')->textInput(['maxlength' => true]) ?>

<?= $form->field($model, 'AGUA_CONSUMO')->textInput(['maxlength' => true]) ?>

更新

有2个计算字段示例:

$("#consumo-form #{$aguaId},#consumo-form #{$personaId}").on("keyup", function (e) {
        var persona = $("#consumo-form #{$personaId}").val();
        var agua = $("#consumo-form #{$aguaId}").val();
        $("#consumo-form #{$indConsumoAguaM}").val(persona*agua)
    });

1 个答案:

答案 0 :(得分:3)

以下是我将使用的方法:

视图中的

<?php
    $personaId = Html::getInputId($model, 'NUM_PERSONAS');
    $aguaId = Html::getInputId($model, 'AGUA_CONSUMO');
?>

    <!-- Begin of form -->
    <?= $form->field($model, 'NUM_PERSONAS')->textInput(['maxlength' => true]) ?>

    <?= $form->field($model, 'AGUA_CONSUMO')->textInput(['maxlength' => true]) ?>
    <!-- End of form -->

<?php
$js = <<<JS
$("#my-form-id #{$personaId}").on("keyup", function (e) {
    var persona = $(this).val();
    $("#my-form-id #{$aguaId}").val(persona*2)
});
$("#my-form-id #{$aguaId}").on("keyup", function (e) {
    var agua = $(this).val()%2 == 0 ? $(this).val() : $(this).val() - 1;
    $("#my-form-id #{$personaId}").val(agua/2)
});
JS;
$this->registerJs($js);

这样,两个字段将在另一个字段更改后尝试自动完成。但是,为了安全起见,我们还需要在模型规则上添加验证。

模型

public function rules()
{
    return [
        // Your rules 
        [['NUM_PERSONAS', 'AGUA_CONSUMO'], 'checkValues']
    ];
}

public function checkValues($attribute)
{
    $persona = $this->NUM_PERSONAS;
    $agua = $this->AGUA_CONSUMO%2 == 0 ? $this->AGUA_CONSUMO : $this->AGUA_CONSUMO - 1;
    if ($persona != $agua/2) {
        $this->addError($attribute, 'Error message');
    }
}