Yii2动态表格wbraganca复制值到克隆字段[重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Yii2动态表格wbraganca复制值到克隆字段[重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
我在我的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 appmodelsUser;
use yiiootstrapActiveForm;
use yiihelpersArrayHelper;
use yiihelpershtml;
use kartik imeTimePicker;
use wbragancadynamicformDynamicFormWidget;
$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 yiiwebView */
/* @var $model appmodulesadminmodelsCustomBreakTime */
/* @var $form yiiwidgetsActiveForm */
?>
<?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>
答案
如果您正在查看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_wrapper
是widgetContainer
小部件属性的值。
对于嵌套表单,尚未正式提供任何支持,尽管您可以编写自己的脚本,例如使用Mutation Observers在插入或删除元素时触发js函数。
Here是一篇很好的文章,有一个实例。
以上是关于Yii2动态表格wbraganca复制值到克隆字段[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Entity Framework 6 深度复制/克隆具有动态深度的实体