记录数组中的Jquery / javascript计算问题

时间:2015-10-24 08:08:38

标签: javascript jquery

我在php脚本中做了一些计算。它在jquery / javascript中完成。我的以下脚本存在一个小问题。实际情况是获取总INR值,在添加(%)字段中添加百分比。因此系统会计算并将此百分比添加到总价值中。它在第一排记录中完美无缺。但在第二行,它取第一行的值。我犯了一个小错误。我的脚本正在关注。请帮我解决这个问题。

<script type='text/javascript' src='http://code.jquery.com/jquery-2.1.3.js'></script>
 <script type='text/javascript'>
 //<![CDATA[

 function getIndexedElement(item, index) {
if (item.length) {
    if (index < item.length) {
        return item[index];
    } else {
        return false;
    }
 } else {
    if (index === 0) {
        return item;
    }
}
return false;
 }

 function isNum(value) {
return 123;
 }

 function calcTotals() {
var grandTotal = 0;
var i = 0;

while (getIndexedElement(document.forms['cart'].elements['add_percentage[]'], i)) {
    add_percentageObj = getIndexedElement(document.forms['cart'].elements['add_percentage[]'], i);
    addon_valueObj = getIndexedElement(document.forms['cart'].elements['addon_value[]'], i);
    total_inr_valueObj = getIndexedElement(document.forms['cart'].elements['total_inr[]'], i);

    totalObj = getIndexedElement(document.forms['cart'].elements['add_value[]'], i);
    priceunitObj = getIndexedElement(document.forms['cart'].elements['price_unit[]'], i);


    qtyObj = getIndexedElement(document.forms['cart'].elements['qty[]'], i);


    if (isNaN(add_percentageObj.value)) {
        add_percentageObj = '';
    }
    if (isNaN(addon_valueObj.value)) {
        addon_valueObj = '';
    }

    if (add_percentageObj.value != 0) {
        totalObj.value = Math.round((total_inr_valueObj.value * 1) * add_percentageObj.value / 100) + total_inr_valueObj.value * 1;
        grandTotal = grandTotal + parseFloat(totalObj.value);

        //priceunitObj.value = total1Obj.value/qtyObj.value;

        //c.value=Math.round((b.value/100) *a.value ).toFixed(2);

    } else if (addon_valueObj.value) {
        totalObj.value = Math.round((addon_valueObj.value * 1) + total_inr_valueObj.value * 1);
        grandTotal = grandTotal + parseFloat(totalObj.value);
        //priceunitObj.value = total1Obj.value/qtyObj.value;

    } else {
        totalObj.value = Math.round((addon_valueObj.value * 1) + total_inr_valueObj.value * 1);
        grandTotal = grandTotal + parseFloat(totalObj.value);
        //priceunitObj.value = total1Obj.value/qtyObj.value;

    }

    i++;
}

document.getElementById('grand_total').value = grandTotal;
return;
 }
 </script>

 </head>

 <body>
<form name='cart' method='post' class='single' action='generate_quot_cust_edititems_save_complete.php?tender_id=14'>
    <input type='hidden' name='sum_input' id='sum_input' value=''>
    <div align="center">
        <table width="100%" border="1" style="border-collapse: collapse;" cellpadding="1" cellspacing="1">
            <tr bgcolor="#E6E6FA">
                <td width=4%>Qty</td>
                <td width=5%>Unitprice</td>

                <td width=8%>Total INR</td>
                <td width=5%>Add (%)</td>
                <td width=7%>Add Value</td>
                <td width=6%>Total Value</td>
                <td width=8%>Total</td>
                <td width=8%>Price/Unit</td>
            </tr>
        </table>
    </div>
    <div align="center" class="base">
        <table width="100%" border="1" style="border-collapse: collapse;" cellpadding="1" cellspacing="1">
            <tr>

                <td width='4%'>
                    <input size='1' class='qty' type='text' name='qty[]' id='qty[]' value='20' readonly/>
                </td>
                <td width='5%'>
                    <input size='5' type='text' name='unitprice[0]' value='678.000' readonly/>
                </td>
                <input size='4' type='hidden' id='total_inr[]' name='total_inr[]' value='883332.313' />
                <td width='8%'>
                    <input size='10' type='text' id='total_inr[]' name='total_inr[]' value='883332.300' />
                </td>
                <td width='5%'>
                    <input class='' size='4' type='text' id='add_percentage[]' name='add_percentage[]' value='0' onchange='calcTotals()'>
                </td>
                <td width='7%'>
                    <input class='txt' type='text' size='7' id='addon_value[]' name='addon_value[]' value='0' onchange='calcTotals()'>
                </td>
                <td width='6%'>
                    <input class='total' data-value='883332' size='6' type='text' id='add_value[]' name='add_value[]' value=''>
                </td>
                <input type="hidden" class="inrvalue" id="inrvalue" name="inrvalue" value="65.1425">
                <input type="hidden" class="deptip" id="dept-input" />
                <input type="hidden" class="priceip" id="price-input" />
                <td width="8%">
                    <input size="9" type="text" data-value="" name='total1[]' id='total1[]' value="16271.993" readonly class="total1" />
                </td>
                <td width='8%'>
                    <input class='price_unit' size='7' type='text' id='price_unit[]' name='price_unit[]' value='813.600' readonly>
                </td>
            </tr>
        </table>
    </div>
    <div align="center" class="base">
        <table width="100%" border="1" style="border-collapse: collapse;" cellpadding="1" cellspacing="1">
            <tr>
                <td width='4%'>
                    <input size='1' class='qty' type='text' name='qty[]' id='qty[]' value='360' readonly/>
                </td>
                <td width='5%'>
                    <input size='5' type='text' name='unitprice[1]' value='569.000' readonly/>
                </td>

                <td width='8%'>
                    <input size='10' type='text' id='total_inr[]' name='total_inr[]' value='13343789.700' />
                </td>
                <td width='5%'>
                    <input class='' size='4' type='text' id='add_percentage[]' name='add_percentage[]' value='0' onchange='calcTotals()'>
                </td>
                <td width='7%'>
                    <input class='txt' type='text' size='7' id='addon_value[]' name='addon_value[]' value='0' onchange='calcTotals()'>
                </td>
                <td width='6%'>
                    <input class='total' data-value='883332' size='6' type='text' id='add_value[]' name='add_value[]' value=''>
                </td>
                <td width="8%">
                    <input size="9" type="text" data-value="" name='total1[]' id='total1[]' value="16000.803" readonly class="total1" />
                </td>
                <td width='8%'>
                    <input class='price_unit' size='7' type='text' id='price_unit[]' name='price_unit[]' value='44.447' readonly>
                </td>
            </tr>
        </table>
    </div>
    <table width='100%'>
        <tr>
            <td width='3%'>&nbsp;</td>
            <td width='4%'>&nbsp;</td>
            <td width='17%'>&nbsp;</td>
            <td width='5%'>&nbsp;</td>
            <td width='5%'>&nbsp;</td>
            <td width='6%'>&nbsp;</td>
            <td width='5%'>&nbsp;</td>
            <td width='7%'>&nbsp;</td>
            <td width='8%'>&nbsp;</td>
            <td width='5%'>&nbsp;</td>
            <td height=35><b>Grand Total:&nbsp;&nbsp;&nbsp;&nbsp;<input type='text' style='font-weight: bold' name='gTotal' id='grand_total' value='1766664.000' readonly /></b></td>
        </tr>
        <tr>
    </table>
    <br>
    </div>
    <table border='0' width='13%'>
        <td>
            <input type='submit' value='--Save Data--' />
        </td>

1 个答案:

答案 0 :(得分:0)

元素ID必须是唯一的。如果您通过id引用元素,并且有多个具有相同ID的元素,那么您可能只会返回第一个元素。另外,我怀疑elements["name"]不会返回一个数组,而是一个独特的元素。

相反,请尝试使用类似的东西:

cartForm = document.forms['cart'];
...
add_percentageObj = getIndexedElement(cartForm.getElementsByName('add_percentage[]'), i);

的元素名称必须是唯一的。我发现您已经在元素上使用了idname

另外我建议写一个这样的函数(未经测试):

function getCartElement(name, index) {
  namedElements = document.forms['cart'].getElementsByName(name);
  if (index >= namedElements.length) return null;
  return namedElements[index];
  if (item.length) {
}

无论如何,你的其余代码看起来像这样:

while (getCartElement('add_percentage[]', i) != null) {
  add_percentageObj = getCartElement('add_percentage[]', i);
  addon_valueObj    = getCartElement('addon_value[]', i);
  ...

请注意,我确保您的函数返回一致的数据类型,而不是一次布尔值,另一次是元素实例...这确实意味着您需要检查空值。

参考:

另请阅读其他stackoverflow article