Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery wbraganca/yii2动态表单值在编辑时复制到克隆字段,但在创建时不复制_Jquery_Yii2 - Fatal编程技术网

Jquery wbraganca/yii2动态表单值在编辑时复制到克隆字段,但在创建时不复制

Jquery wbraganca/yii2动态表单值在编辑时复制到克隆字段,但在创建时不复制,jquery,yii2,Jquery,Yii2,我在Yii2项目中使用动态表单。 我想复制克隆字段中的值。 我观察到,如果我使用“编辑”,它会复制克隆字段上的值,但在使用“创建”时不会复制 是这样设计的吗。我怎样才能做到这一点。 我希望复制值的字段是select字段 我还注意到,在yii2 dynamic form.js中,它包含如下代码: $template.find('input, textarea, select').each(function() { $(this).val(''); }); 此

我在Yii2项目中使用动态表单。 我想复制克隆字段中的值。 我观察到,如果我使用“编辑”,它会复制克隆字段上的值,但在使用“创建”时不会复制

是这样设计的吗。我怎样才能做到这一点。 我希望复制值的字段是select字段

我还注意到,在
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);

?>

您可以像下面这样在插入事件后绑定

$('.dynamicform_wrapper').on('afterInsert', function (e, item) {
  //code to copy values from the desired row/field set
});
dynamicform_wrapper
widgetContainer
小部件属性的值。并使用包含当前插入面板/行的引用的

因此,您需要将代码更改为以下内容,我无法通过运行来测试它,但希望它能够正常工作

我假设您的字段名为
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);
?>

我在一天前回答了一个类似的问题,但仍然没有被接受,您可以看到,如果答案对您有效,请投票。我尝试按照您在另一个答案中的提示使用代码。我使用的代码包含在问题中。这对我不起作用。您可以看一下吗。为什么要将事件绑定到
$('select')中。each()
,并尝试使用
$this->registerJs($script,\yii\web\view::POS\u ready)在ready上加载脚本$(this).clone(true)事件内部为什么?当您单击“添加”按钮或“添加行”按钮时,克隆已经完成,添加新行后将触发事件,您只需覆盖这些值即可。@MuhammadOmerAslam-Hi您能帮我解决这个问题吗。我只是对jQuery有一点了解。不,像你这样的专家。你想在创建新行时复制“天数”下拉列表吗,?或者在添加新行时,希望从上一行下拉列表中选择相同的值?据我所知,在创建或添加新行时,下拉列表应具有默认值集。我收到的错误如下:
未定义变量:modelCustomBreakTime
,引用的行是-
$rf=new ReflectionClass($modelCustomBreakTime)您在哪里添加了上述代码?您需要将其添加到视图中@我已经在视图中添加了PawanYes,但是在我应该在页脚中添加它之前。我的意思是在最后。如果我在最后添加代码,我不会得到那个错误。但是没有复制该值。这很奇怪,您是否正在从控制器传递
$modelsCustomBreakTime
?看风景。它只需要获取您可以手动提供的模型名称,并在javascript代码中用您的模型名称替换
{$modelname}
@帕万