Javascript 当从所有索引中获取值时,yii2 dropDownList始终延迟一步
我使用的是yii2动态表单wbraganca,在动态表单中我使用的是kartik/select2。以下是我的查看代码:Javascript 当从所有索引中获取值时,yii2 dropDownList始终延迟一步,javascript,drop-down-menu,yii2,Javascript,Drop Down Menu,Yii2,我使用的是yii2动态表单wbraganca,在动态表单中我使用的是kartik/select2。以下是我的查看代码: <div class="col-sm-8 col-md-3"> <?= $form->field($detail, "[{$i}]item_id")->widget(Select2::className(), [ 'data' => ArrayHelper::map(Item:
<div class="col-sm-8 col-md-3">
<?= $form->field($detail, "[{$i}]item_id")->widget(Select2::className(), [
'data' => ArrayHelper::map(Item::find()->all(), 'id', 'name'),
'language' => 'en',
'options' => ['placeholder' => 'Select a item ...', 'onchange' => 'getItemPrice($(this))'],
'pluginOptions' => [
'allowClear' => true,
],
]);
?>
</div>
<div class="col-sm-4 col-md-2">
<?= $form->field($detail, "[{$i}]qty")->widget(MaskedInput::className(),
[
'clientOptions' => [
'alias' => 'numeric',
'groupSeparator' => ',',
'digits' => 0,
'autoGroup' => true,
'removeMaskOnSubmit' => true,
'rightAlign' => false,
],
'options' => [
'class' => 'form-control',
'onchange' => 'calculateSubtotal($(this))',
]
]) ?>
</div>
<div class="col-sm-4 col-md-2">
<?= $form->field($detail, "[{$i}]price")->widget(MaskedInput::className(),
[
'clientOptions' => [
'alias' => 'numeric',
'groupSeparator' => ',',
'digits' => 0,
'autoGroup' => true,
'removeMaskOnSubmit' => true,
'rightAlign' => false,
],
'options' => [
'class' => 'form-control',
'onchange' => 'calculateSubtotal($(this))',
]
]) ?>
</div>
<div class="col-sm-4 col-md-2">
<?= $form->field($detail, "[{$i}]total")->widget(MaskedInput::className(),
[
'clientOptions' => [
'alias' => 'numeric',
'groupSeparator' => ',',
'digits' => 0,
'autoGroup' => true,
'removeMaskOnSubmit' => true,
'rightAlign' => false,
]
]) ?>
</div>
这是我的javascript代码
function getItemPrice(item){
var index = item.attr("id").replace(/[^0-9.]/g, "");
var item_id = $('#purchaseorderdetail-'+ index + "-item_id").val();
$.get('../item/get-price', {id : item_id}, function(data){
$('#purchaseorderdetail-' + index + '-price').val(data);
$('#purchaseorderdetail-' + index + '-qty').val(1);
$('#purchaseorderdetail-' + index + '-total').val(data);
});
calculateTotal(Number(index)+1);
}
function calculateSubtotal(item){
var index = item.attr("id").replace(/[^0-9.]/g, "");
var qty = $('#purchaseorderdetail-' + index + '-qty').val();
qty = qty == "" ? 0 : Number(qty.split(",").join(""));
var price = $('#purchaseorderdetail-' + index + '-price').val();
price = price == "" ? 0 : Number(price.split(",").join(""));
$('#purchaseorderdetail-' + index + '-total').val(qty * price);
calculateTotal(Number(index)+1);
}
function calculateTotal(index){
var total = 0;
for(i=0; i< index; i++){
var subtotal = $('#purchaseorderdetail-' + i + '-total').val();
subtotal = subtotal == "" ? 0 : Number(subtotal.split(",").join(""));
alert(subtotal);
total = total + subtotal;
}
$('#purchaseorder-total').val(total);
}
函数getItemPrice(项目){
var index=item.attr(“id”)。替换(/[^0-9.]/g,”);
var item_id=$('#purchaseorderdetail-'+index+“-item_id”).val();
$.get('../item/get price',{id:item_id},函数(数据){
$('purchaseorderdetail-'+index+'-price').val(数据);
$(“#purchaseorderdetail-”+索引+“-数量”).val(1);
$('#purchaseorderdetail-'+index+'-total').val(数据);
});
计算总数(数字(指数)+1);
}
函数calculateSubtotal(项){
var index=item.attr(“id”)。替换(/[^0-9.]/g,”);
变量数量=$(“#purchaseorderdetail-”+索引+“-数量”).val();
数量=数量=“”?0:数量(数量拆分(“”、“”、联接(“”);
var价格=$(“#purchaseorderdetail-”+索引+“-价格”).val();
price=price==“”?0:数字(price.split(“,”).join(“”);
$(“#purchaseorderdetail-”+索引+“-总计”).val(数量*价格);
计算总数(数字(指数)+1);
}
函数计算总计(索引){
var合计=0;
对于(i=0;i
当我选择第一个项目(价格150000和数量1)时,函数calculate total总是给出结果0,然后我添加第二个项目(价格370000和数量1),它给出结果total=150000。当我将第二项更改为价格为55000的另一项时,它给出的结果总计为520000
我错过了什么?请给我一些建议。
谢谢我通过移动code
calculateTotal(Number(index)+1)找到了这个anwser代码>在函数getItemPrice(item)
中放入花括号$。获取
。
现在,当我删除第二项时,如何再次进行计算?已找到我需要的内容。
只需添加这些代码即可重新计算
jQuery(".dynamicform_wrapper").on("afterDelete", function(e) {
jQuery(".dynamicform_wrapper .remove-item").each(function(i) {
calculateTotal(i+1);
});
});