我在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);
?>
答案 0 :(得分:1)
您可以像下面那样绑定afterInsert
事件
$('.dynamicform_wrapper').on('afterInsert', function (e, item) {
//code to copy values from the desired row/field set
});
dynamicform_wrapper
是widgetContainer
小部件属性的值。并使用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);
?>