wbraganca / yii2-dynamicform值在编辑时复制到克隆字段,但在创建时不复制

时间:2018-07-04 10:49:39

标签: jquery yii2

我在Yii2项目中使用动态表格。 我想复制克隆字段中的值。 我观察到的是,如果使用edit,它将复制克隆字段上的值,但使用create时不会复制。

是这样设计的吗?我如何实现这一目标。 我要复制值的字段是一个选择字段。

我还观察到,在yii2-dynamic-form.js中,它包含类似以下代码:

$template.find('input, textarea, select').each(function() {
           $(this).val('');
        });

是此代码阻止值复制的代码。 但我也尝试注释掉相关代码,但没有成功。

该字段的相关html如下:

<div class="col-sm-4">
<?= $form->field($modelCustomBreakTime, 
"[{$i}]days")->dropDownList($days,['prompt'=>'select']) ?>
</div>

根据Muhammad Omer Aslam评论中的链接的建议代码

<?php 
$script= <<<Js
         $('select').each(function() {
        $('.dynamicform_wrapper').on('afterInsert', function (e, item) {
        $(this).clone(true);
        });
});
Js;
$this->registerJs($script);

?>

1 个答案:

答案 0 :(得分:1)

您可以像下面那样绑定afterInsert事件

$('.dynamicform_wrapper').on('afterInsert', function (e, item) {
  //code to copy values from the desired row/field set
});

dynamicform_wrapperwidgetContainer小部件属性的值。并使用item保留当前插入的面板/行的引用。

因此,您需要将代码更改为以下代码,我无法通过运行对其进行测试,但希望它可以正常工作。

我假设您的字段名称为days,并且生成的name属性将像CustomBreakTime[]['days']一样,如有必要,请在下面的脚本中相应地更改模型名称或属性名称

<?php 

$rf=new ReflectionClass($modelCustomBreakTime);
$modelname=$rf->getShortName();

$script=<<<JS
        $('.dynamicform_wrapper').on('afterInsert', function (e, item) {
            let totalPanels         =   $(".item.panel.panel-default").length;
            let curPanelIndex       =   totalPanels-1;
            let prvPanelIndex       =   curPanelIndex-1;
            let curSelectInput      =   $(item).find('div.panel-body div.form-group select[name="{$modelname}['+curPanelIndex+'][days]"]');
            let prevSelectInput     =   $("select[name='{$modelname}["+prvPanelIndex+"][days]']");
            curSelectInput.val(prevSelectInput.val());
        });
JS;
$this->registerJs($script, \yii\web\View::POS_READY);
?>