2016-10-20 2 views
1

У меня есть динамические формы wbraganca, работающие в Yii2, но мне нужно добавить небольшую функцию, чтобы умножить 2 поля и поместить значение в третью, и делать это в каждой новой динамической форме (предположим, что поле 1 - цена , поле 2 - это сумма, а поле 3 - общее). С кодом, который у меня есть, я могу это сделать, но только в первой динамической форме.Yii2-dynamicforms и javascript

<?php 
$script = <<< JS 
$('#itemsfactura-{$i}-cantidad').change(function(){ 
    var cantidad = $(this).val(); 
    var precio = $('#itemsfactura-{$i}-precio').val(); 
    $('#itemsfactura-{$i}-total_item').val(cantidad * precio); 
}); 
JS; 
$this->registerJs($script); 
?> 

Это код для динамических полей формы:

... 
<div class="row"> 
    <div class="col-sm-4"> 
     <?= $form->field($modelItemFactura, "[{$i}]precio")->textInput(['maxlength' => true]) ?> 
    </div> 
    <div class="col-sm-4"> 
     <?= $form->field($modelItemFactura, "[{$i}]cantidad")->textInput(['maxlength' => true]) ?> 
    </div> 
    <div class="col-sm-4"> 
     <?= $form->field($modelItemFactura, "[{$i}]total_item")->textInput(['maxlength' => true]) ?> 
    </div> 
</div>... 

ответ

1

Форма

<div class="col-sm-4"> 
    <?= $form->field($modelItemFactura, "[{$i}]precio")->textInput(['maxlength' => true, 'onchange' => 'getProduct($(this))', 'onkeyup' => 'getProduct($(this))']) ?> 
</div> 
<div class="col-sm-4"> 
    <?= $form->field($modelItemFactura, "[{$i}]cantidad")->textInput(['maxlength' => true, 'onchange' => 'getProduct($(this))', 'onkeyup' => 'getProduct($(this))']) ?> 
</div> 

JS

function getProduct(item) { 
    var index = item.attr("id").replace(/[^0-9.]/g, ""); 
    var total = current = next = 0; 

    var id = item.attr("id"); 
    var myString = id.split("-").pop(); 

    if(myString == "precio") { 
     fetch = index.concat("-cantidad"); 
    } else { 
     fetch = index.concat("-precio"); 
    } 

    temp = $("#itemsfactura-"+fetch+"").val(); 

    if(!isNaN(temp) && temp.length != 0) { 
     next = temp; 
    } 

    current = item.val(); 
    if(isNaN(current) || current.length == 0) { 
     current = 0; 
    } 

    if(!isNaN(current) && !isNaN(next)) { 
     total = parseInt(current) * parseInt(next); 
    } 

    totalItem = "itemsfactura-".concat(index).concat("-total_item"); 

    $("#"+totalItem+"").val(total); 
} 
+0

Спасибо Insane Skull !, он работает безупречно. Я просто удалил свой встроенный скрипт и поместил ваш файл в отдельный файл и зарегистрировал файл. С уважением. –