计算嵌套Yii2动态输入形式

计算嵌套Yii2动态输入形式

问题描述:

晕,我正在使用Yii2动态形式wbraganca。我想在主窗体中将嵌套窗体计算为输入字段。计算嵌套Yii2动态输入形式

这是我的主要动态表单:

_form.php这个

<h3>Data Pengeluaran</h3> 
<?php DynamicFormWidget::begin([ 
    'widgetContainer' => 'dynamicform_pengeluaran', 
    'widgetBody' => '.container-pengeluaran', 
    'widgetItem' => '.item-pengeluaran', 
    'min' => 1, 
    'insertButton' => '.add-item-pengeluaran', 
    'deleteButton' => '.remove-item-pengeluaran', 
    'model' => $modelPengeluaran[0], 
    'formId' => 'dynamic-form', 
    'formFields' => [ 
     'tgl_pengeluaran', 
     'nama_toko', 
     'metode_pembayaran', 
     'waktu_pembayaran', 
     'jlh_pengeluaran', 
     'jlh_bayar', 
    ], 
]); ?> 
<div class="container-pengeluaran"><!-- widgetContainer --> 
<?php foreach ($modelPengeluaran as $index => $modelPengeluaran): ?> 
    <div class="item-pengeluaran panel panel-default"><!-- widgetBody --> 
     <div class="panel-heading"> 
      <h3 class="panel-title pull-left">Pengeluaran</h3> 
      <div class="pull-right"> 
       <button type="button" class="add-item-pengeluaran btn btn-success btn-xs"><i class="glyphicon glyphicon-plus"></i></button> 
       <button type="button" class="remove-item-pengeluaran btn btn-danger btn-xs"><i class="glyphicon glyphicon-minus"></i></button> 
      </div> 
      <div class="clearfix"></div> 
     </div> 
     <div class="panel-body"> 
      <?php 
       // necessary for update action. 
       if (! $modelPengeluaran->isNewRecord) { 
        echo Html::activeHiddenInput($modelPengeluaran, "[{$index}]id"); 
       } 
      ?> 
      <div class="row"> 
       <div class="col-md-12"> 
       <?= $form->field($modelPengeluaran, "[{$index}]tgl_pengeluaran")->widget(DatePicker::classname(), [ 
         'type' => DatePicker::TYPE_COMPONENT_APPEND, 
         'options' => ['placeholder' => '-- Tanggal Pengeluaran --'], 
         'pluginOptions' => [ 
          'autoclose'=>true, 
          'format' => 'yyyy-mm-dd', 
          'todayHighlight' => true 
         ] 
        ]); 
       ?> 

       <?= $form->field($modelPengeluaran, "[{$index}]nama_toko")->textInput(['maxlength' => true]) ?> 

       <?= $form->field($modelPengeluaran, "[{$index}]metode_pembayaran")->dropDownList([ 'Tunai' => 'Tunai', 'Hutang' => 'Hutang', ], ['prompt' => '-- Pilih Pembayaran --']) ?> 

       <?= $form->field($modelPengeluaran, "[{$index}]waktu_pembayaran")->dropDownList([ 'Berangkat' => 'Berangkat', 'Pulang' => 'Pulang', ], ['prompt' => '-- Pilih Waktu Pembayaran --']) ?> 

       <?= $this->render('_form-barang', [ 
        'form' => $form, 
        'index' => $index, 
        'modelBarang' => $modelBarang[$index], 
       ]) ?> 

       <?= $form->field($modelPengeluaran, "[{$index}]jlh_pengeluaran")->widget(\yii\widgets\MaskedInput::className(), 
        [ 
         'clientOptions' => [ 
          'alias' => 'numeric', 
          'groupSeparator' => '.', 
          'digits' => 0, 
          'autoGroup' => true, 
          'removeMaskOnSubmit' => true, 
          'rightAlign' => false,                 
         ], 
         'options' => [ 
          'class' => 'form-control', 
          'maxlength' => true, 
         ]                
        ]) 
       ?> 

       <?= $form->field($modelPengeluaran, "[{$index}]jlh_bayar")->widget(\yii\widgets\MaskedInput::className(), 
        [ 
         'clientOptions' => [ 
          'alias' => 'numeric', 
          'groupSeparator' => '.', 
          'digits' => 0, 
          'autoGroup' => true, 
          'removeMaskOnSubmit' => true, 
          'rightAlign' => false,                 
         ], 
         'options' => [ 
          'class' => 'form-control', 
          'maxlength' => true, 
         ]                
        ]) 
       ?> 
       </div> 
      </div><!-- .row --> 
     </div> 
    </div> 
<?php endforeach; ?> 
</div> 
<?php DynamicFormWidget::end(); ?> 

这是我的嵌套的动态表单:

_form-b​​arang.php

<?php DynamicFormWidget::begin([ 
    'widgetContainer' => 'dynamicform_inner', 
    'widgetBody' => '.container-barang', 
    'widgetItem' => '.item-barang', 
    'min' => 1, 
    'insertButton' => '.add-barang', 
    'deleteButton' => '.remove-barang', 
    'model' => $modelBarang[0], 
    'formId' => 'dynamic-form', 
    'formFields' => [ 
     'jlh_barang', 
     'nama_barang', 
     'jlh_harga', 
    ], 
]); ?> 
<table class="table"> 
    <tbody class="container-barang"> 
    <?php foreach ($modelBarang as $indexBarang => $modelBarang): ?> 
     <tr class="item-barang"> 
      <td class="vcenter"> 
       <?php 
        // necessary for update action. 
        if (! $modelBarang->isNewRecord) { 
         echo Html::activeHiddenInput($modelBarang, "[{$index}][{$indexBarang}]id"); 
        } 
       ?> 
       <?= $form->field($modelBarang, "[{$index}][{$indexBarang}]jlh_barang")->widget(\yii\widgets\MaskedInput::className(), 
        [ 
         'clientOptions' => [ 
          'alias' => 'numeric', 
          'groupSeparator' => '.', 
          'digits' => 0, 
          'autoGroup' => true, 
          'removeMaskOnSubmit' => true, 
          'rightAlign' => false,                 
         ], 
         'options' => [ 
          'class' => 'form-control', 
          'maxlength' => true, 
         ]                
        ]) 
       ?> 
      </td> 
      <td> 
       <?= $form->field($modelBarang, "[{$index}][{$indexBarang}]nama_barang")->textInput(['maxlength' => true]) ?> 
      </td> 
      <td> 
       <?= $form->field($modelBarang, "[{$index}][{$indexBarang}]jlh_harga")->widget(\yii\widgets\MaskedInput::className(), 
        [ 
         'clientOptions' => [ 
          'alias' => 'numeric', 
          'groupSeparator' => '.', 
          'digits' => 0, 
          'autoGroup' => true, 
          'removeMaskOnSubmit' => true, 
          'rightAlign' => false,                 
         ], 
         'options' => [ 
          'class' => 'form-control', 
          'maxlength' => true, 
         ]                
        ]) 
       ?> 
      </td> 
      <td class="text-center vcenter" style="width: 90px;"> 
       <button type="button" class="add-barang btn btn-success btn-xs"><span class="glyphicon glyphicon-plus"></span></button> 
       <button type="button" class="remove-barang btn btn-danger btn-xs"><span class="glyphicon glyphicon-minus"></span></button> 
      </td> 
     </tr> 
    <?php endforeach; ?> 
    </tbody> 
</table> 
<?php DynamicFormWidget::end(); ?> 

从这一点,这是截图: enter image description here

我尝试跟踪该question的代码,但我只拿到了最后一个值从嵌套形式,比如在图片上。

这是我的脚本:

$(document).on('keyup', 'input[id^="barangpengeluaran-"]', function() { 
    var index = $(this).attr("id").replace(/[^0-9.]/g, ""); 
    var index_pengeluaran = index.substring(0,1); 
    var index_barang = index.substring(1,2); 

    var index_fix = index_pengeluaran+'-'+index_barang; 

    var sum = 0; 

    $('#barangpengeluaran-'+index_fix+'-jlh_harga').each(function() { 
     var harga = $(this).val().replace(/,/g , ""); 
     sum = parseInt(sum) + parseInt(harga); 
    }); 

    $('#pengeluaran-'+index_pengeluaran+'-jlh_pengeluaran').val(sum); 
}); 

必须填写所有的嵌套形式的孩子,你可以尝试用删除按钮ID填充

我注意到你设定的ID删除按钮”卸下摆臂-barang”

所以,答案是这样的:

$(document).on('keyup', 'input[id^="barangpengeluaran-"]', function() { 
      var index = $(this).attr("id").replace(/[^0-9.]/g, ""); 
      var index_pengeluaran = index.substring(0,1); 
      var index_barang = index.substring(1,2); 

      var index_fix = index_pengeluaran+'-'+index_barang; 

      var sum = 0; 

      // populate delete button and get the index 
      jQuery(".dynamicform_wrapper .remove-barang").each(function(index) { 
       // get the value of each column 
       var harga = $('#barangpengeluaran-' + index + '-jlh_harga').val().replace(/,/g , ""); 
       // sum all of harga 
       sum += harga; 
      }); 


      $('#pengeluaran-'+index_pengeluaran+'-jlh_pengeluaran').val(sum); 
    }); 

但我认为您必须添加专栏小计,并且我会帮助您提供更好的解决方案