小熊的耳朵 2019-03-22 14:17 采纳率: 0%
浏览 486

jquery each JavaScript 运行时错误: 错误的参数个数或无效的参数属性值

jquery each遍历时报错:“JavaScript 运行时错误: 错误的参数个数或无效的参数属性值”
报错信息如图:图片说明
点中断继续调试:图片说明
可以看到遍历的对象是有值的:图片说明
callBack方法可以正常执行:图片说明
整体并未影响程序和代码执行和项目使用,但是看着着实不爽,希望各位大神指点。

ResetCostLayoutSpare: function(budgetXml, costGUID) {

        var xmlBudget = new ActiveXObject("Microsoft.XMLDOM");
        xmlBudget.async = false;
        xmlBudget.loadXML(budgetXml);
        var BudgetCostList = xmlBudget.getElementsByTagName("cb_BudgetRecordCostList/cb_BudgetRecordCost");
        debugger
        var costArr = [];
        var attrCostGUID = "";
        var attrLayoutSpare = 0;
        var isAdd = true;
        if (costGUID == "" || costGUID == null) {
            //遍历现有 合约规划科目xml数据列表
            $.each($(BudgetCostList),function(index, element) {
                attrCostGUID = $(this).attr("CostGUID");
                attrLayoutSpare = MyCalcDoubleFix(MyCalcDoubleFix($(this).attr("BudgetAmount").replace(/,/g, ""), $(this).attr("BeforeAmout").replace(/,/g, ""), "+"), $(this).attr("CurrUseAmount").replace(/,/g, ""), "-");
                isAdd = true;
                //循环遍历 已经存在的科目,如果存在相同的科目 那么则修改 科目余量
                $(costArr).each(function(index, element) {
                    if ($(this).CostGUID == attrCostGUID) {
                        $(this).LayoutSpare = attrLayoutSpare;
                        isAdd = false;
                        return false;
                    }
                });
                if (isAdd) {
                    var obj = {};
                    obj.CostGUID = attrCostGUID;
                    obj.LayoutSpare = attrLayoutSpare;
                    costArr.push(obj);
                }
            });
        }

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-08 11:39
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    根据您提供的代码,我注意到一个潜在的问题。在resetCostLayoutSpare函数中,当检查是否存在相同的科目时,没有正确地返回 false。这可能导致循环中的元素被递归处理,直到找到第一个不同的科目。

    要解决这个问题,请确保在循环结束后调用 isAdd = false; 并在循环之外添加条件来检查是否有任何更改。以下是修复后的代码示例:

    resetCostLayoutSpare: function(budgetXml, costGUID) {
    
        var xmlBudget = new ActiveXObject("Microsoft.XMLDOM");
        xmlBudget.async = false;
        xmlBudget.loadXML(budgetXml);
        var BudgetCostList = xmlBudget.getElementsByTagName("cb_BudgetRecordCostList/cb_BudgetRecordCost");
        debugger
        var costArr = [];
    
        var attrCostGUID = '';
        var attrLayoutSpare = 0;
    
        var isAdd = true;
    
        if (costGUID == '' || costGUID == null) {
            // 遍历现有 合约规划科目xml数据列表
            $.each($(BudgetCostList), function(index, element) {
                attrCostGUID = $(this).attr("CostGUID");
                attrLayoutSpare = MyCalcDoubleFix(
                    MyCalcDoubleFix($(this).attr("BudgetAmount").replace(/,/g, ""),
                                    $(this).attr("BeforeAmout").replace(/,/g, ""),
                                    "+"),
                    $(this).attr("CurrUseAmount").replace(/,/g, ""),
                    "-"
                );
                isAdd = true;
                // 循环遍历 已经存在的科目,如果存在相同的科目 那么则修改 科目余量
                $(costArr).each(function(index, element) {
                    if ($(this).CostGUID == attrCostGUID) {
                        $(this).LayoutSpare = attrLayoutSpare;
                        isAdd = false;
                        return false;
                    }
                });
                if (isAdd) {
                    var obj = {};
                    obj.CostGUID = attrCostGUID;
                    obj.LayoutSpare = attrLayoutSpare;
                    costArr.push(obj);
                }
            });
        }
    
        // 在循环之外添加条件来检查是否有任何更改
        if (!isAdd) {
            return false;
        }
    
        // 如果是添加,则设置isAdd为false并返回true
        isAdd = false;
        return true;
    }
    

    现在,resetCostLayoutSpare函数应该能够正确处理所有情况,并避免出现无限递归的情况。

    评论

报告相同问题?