Yii2动态表格wbraganca复制值到克隆字段[重复]

问题描述 投票:0回答:1

我在我的Yii2项目中使用wbraganca动态表单,我想在第一组字段中输入的值复制到克隆div中的字段集。

据我所知,jQuery默认将值复制到克隆字段。在浏览扩展的dynamicform.js时,我发现代码我认为会覆盖默认功能,不允许将值复制到克隆字段。

负责相同的相关代码是这样的:

$template.find('input, textarea, select').each(function() {
if ($(this).is(':checkbox') || $(this).is(':radio')) {

...
 $(this).prop('checked', false);
            } else if($(this).is('select')) {
                $(this).find('option:selected').removeAttr("selected");
            } else {
                $(this).val(''); 
            }
});

....

现在我的问题是如何将第一组字段的值复制到克隆字段。例如我的字段就像:

<?= $form->field($modelCustomBreakTime, 
"[{$i}]days")->dropDownList(['select',$days]) ?> //where $days are days of week

基本上我想要的是当我选择星期一时,复制的值应该是星期一。

更新:_form.php内容

<?php

use app\models\User;
use yii\bootstrap\ActiveForm;
use yii\helpers\ArrayHelper;
use yii\helpers\Html;
use kartik\time\TimePicker;
use wbraganca\dynamicform\DynamicFormWidget;
$instructor_id=htmlspecialchars($_GET["id"]);
$instructor_array = ArrayHelper::map(User::find()->where(['user_role' => 'instructor'])->andwhere(['status' => 10])->all(), 'id', function ($model) {
    return $model['first_name'] . ' ' . $model['last_name'];

})

/* @var $this yii\web\View */
/* @var $model app\modules\admin\models\CustomBreakTime */
/* @var $form yii\widgets\ActiveForm */
?>
<?php 
//$instructor_id=htmlspecialchars($_GET["id"]);
       // var_dump($id);

?>

    <div class="customer-form">

    <?php $form = ActiveForm::begin(['id' => 'dynamic-form']); 
        $days = ['Monday' => Yii::t('app', 'Monday'),
    'Tuesday' => Yii::t('app', 'Tuesday'),
    'Wednesday' => Yii::t('app', 'Wednesday'),
    'Thursday' => Yii::t('app', 'Thursday'),
    'Friday' => Yii::t('app', 'Friday'),
    'Saturday' => Yii::t('app', 'Saturday'),
    'Sunday' => Yii::t('app', 'Sunday'),
]; ?>
    <div class="row"> 


    <div class="panel panel-default">
        <div class="panel-heading"><h4></i> Break Times</h4></div>
        <div class="panel-body">
             <?php DynamicFormWidget::begin([
                'widgetContainer' => 'dynamicform_wrapper', // required: only alphanumeric characters plus "_" [A-Za-z0-9_]
                'widgetBody' => '.container-items', // required: css class selector
                'widgetItem' => '.item', // required: css class
                'limit' => 10, // the maximum times, an element can be cloned (default 999)
                'min' => 1, // 0 or 1 (default 1)
                'insertButton' => '.add-item', // css class
                'deleteButton' => '.remove-item', // css class
                'model' => $modelsCustomBreakTime[0],
                'formId' => 'dynamic-form',
                'formFields' => [
                    'days',
                    'start_time',
                    'end_time',

                ],
            ]); ?>

            <div class="container-items"><!-- widgetContainer -->
            <?php foreach ($modelsCustomBreakTime as $i => $modelCustomBreakTime): ?>
                <div class="item panel panel-default"><!-- widgetBody -->
                    <div class="panel-heading">
                        <h3 class="panel-title pull-left">CustomBreakTime</h3>
                        <div class="pull-right">
                            <button type="button" class="add-item btn btn-success btn-xs"><i class="glyphicon glyphicon-plus"></i></button>
                            <button type="button" class="remove-item btn btn-danger btn-xs"><i class="glyphicon glyphicon-minus"></i></button>
                        </div>
                        <div class="clearfix"></div>
                    </div>
                    <div class="panel-body">

                        <div class="col-sm-6">
                        <?=$form->field($modelInstructor, 'id')->dropDownList($instructor_array, ['options' => [$_GET['id'] => ['Selected'=>'selected'],'prompt' => 'Select Instructor']])?>
                        </div>
                        <?php
                            // necessary for update action.
                            if (! $modelCustomBreakTime->isNewRecord) {
                                echo Html::activeHiddenInput($modelCustomBreakTime, "[{$i}]id");
                            }

                        ?>
                        <div class="row">

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

                            <div class="col-sm-4">
                                <?= $form->field($modelCustomBreakTime, "[{$i}]start_time",['enableLabel' => false])->widget(TimePicker::classname(), ['pluginOptions' => [
                            'minuteStep' => 15,
                            'showMeridian' => false,
                            'defaultTime' => date('H:i', strtotime('11.00')), ],
                    ]) ?>
                            </div>


                            <div class="col-sm-4">
                                <?= $form->field($modelCustomBreakTime, "[{$i}]end_time",['enableLabel' => false])->widget(TimePicker::classname(), ['pluginOptions' => [
                            'minuteStep' => 15,
                            'showMeridian' => false,
                            'defaultTime' => date('H:i', strtotime('11.00')), ],
                    ]) ?>
                            </div>

                        </div><!-- .row -->
                    </div>
                </div>
            <?php endforeach; ?>
            </div>
            <?php DynamicFormWidget::end(); ?>
        </div>
    </div>

    <div class="form-group">
        <?= Html::submitButton($modelCustomBreakTime->isNewRecord ? 'Create' : 'Update', ['class' => 'btn btn-primary']) ?>
    </div>

    <?php ActiveForm::end(); ?>

</div>
php jquery yii2
1个回答
0
投票

如果您正在查看js文件,那么您可能忽略了events第26行的dynamicform.js部分

var events = {
    beforeInsert : 'beforeInsert',
    afterInsert : 'afterInsert',
    beforeDelete : 'beforeDelete',
    afterDelete : 'afterDelete',
    limitReached : 'limitReached'
};

但是,只有在不使用嵌套表单时才能使用这些事件。您可以绑定afterInsert事件,如下所示

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

dynamicform_wrapperwidgetContainer小部件属性的值。

对于嵌套表单,尚未正式提供任何支持,尽管您可以编写自己的脚本,例如使用Mutation Observers在插入或删除元素时触发js函数。

Here是一篇很好的文章,有一个实例。

© www.soinside.com 2019 - 2024. All rights reserved.