如何在依赖于另一个字段的文本框上绑定动态屏蔽格式

How to bind Dynamic masking format on textbox which depend on another field

我正在使用 yii2 高级应用程序。现在我有一个下拉菜单和一个文本框。下拉值是 Driving Licence 和另一个 Pan No.

当用户 select Driving Licence 时,屏蔽格式为 9999 9999999999Pan No.99-9999-9999

我的_form.php

<div class="form-group" id="div_document">
                                    <?= $form->field($orderMasterModel, 'document')->dropDownList(['Driving Licence' => 'Driving Licence', 'Pan Card' => 'Pan Card'], ['placeholder' => 'Document']) ?>
</div>

<div class="form-group" id="div_document_no">
                                    <?= $form->field($orderMasterModel, 'pan_no')->widget(\yii\widgets\MaskedInput::className(), [
                                            'mask' => '999-999-9999',
                                        ]) ?>
</div>

现在我不知道如何制作文本框的依赖掩码格式。请帮忙。

我认为如果没有任何类型的 AJAX 就无法做到这一点,PHP 在执行时在服务器中运行,因此如果没有其他编程就无法有条件地更改掩码。

在这里我找到了解决办法。使用 Php 无法提供动态掩码。所以我使用 javascript.

  1. 先把'data-plugin-inputmask'=>"inputmask_b1ea8b87"放在需要遮罩的地方

    <div class="col-md-6">
                                    <div class="form-group" id="div_document_no" style="display: none">
                                        <?= $form->field($orderMasterModel, 'pan_no')->textInput(['placeholder' => 'Document No','data-plugin-inputmask'=>"inputmask_b1ea8b87"]) ?>
                                    </div>
    

  2. 在查看页面绑定jquery.inputmask.bundle.js。

    list(,$mask)=Yii::$app->assetManager->publish('@bower/jquery.inputmask/dist/jquery.inputmask.bundle.js'); $this->registerJsFile($mask,['position' =>View::POS_END]);

  3. 在javascript.

    $('#ordermaster-document').on('change', function() {
        if(this.value=='Pan Card')
        {
            var inputmask_b1ea8b87 = {"mask":"a{5}9999A{1}"};
        }else{
           var inputmask_b1ea8b87 = {"mask":"a{2}99 99999999999"}; 
        }
        $("#ordermaster-pan_no").inputmask(inputmask_b1ea8b87);
    

    });

通过 可以应用此动态屏蔽。