调用Javascript函数两次的问题结果调用一次

时间:2016-11-17 21:04:44

标签: javascript

我正在开发一个需要构建表单的项目。表单有一个函数,用于汇总列和行。我严格使用HTML和JavaScript。我无法获得两次调用的JavaScript函数,一次用于行,一次用于列(我实际上将调用它3次,因为我还需要执行部分总计)。我已经为需要求和的列控件创建了不同的类,并为需要求和的行控件创建了一个不同的类,因此输入控件中有两个不同的类。我也相信它可以在for循环中,因为我对它进行了评论并使用了一个警告声明,它似乎完美无缺。请参阅以下代码:

JavaScript的:

<script type="text/JavaScript">
function CalcSum(displayIn, calcClass){
    var sum = 0;
    var displayCell = displayIn;
    className = calcClass;

    var divs = document.getElementsByClassName(className);
    var args = [];

    for (var i = 0; i <=divs.length; i++){

        args.push(divs[i].value);
        val = divs[i].value;
        sum += val*1;
        document.getElementById(displayCell).value = sum;
        dollarAmount("Form1", displayCell);
    }
}

HTML控件:

<input type="text" name="ctl_001" value="" id="ctl_001" class="col4txrev col4" onchange="CalcSum('T1_TOT_C4_TXREV','col4txrev');CalcSum('T1_TOT_C4','col4');" style= "width: 100%">

1 个答案:

答案 0 :(得分:1)

根据我对您的问题的理解,您的脚本在技术上和功能上都有多处错误。

我已经纠正了错误,可以看到控制台在调用时打印日志两次。

注意:无论如何,请勿从内联属性调用该函数两次。创建另一个将执行相同操作并从git checkout事件(或)以编程方式创建onchange侦听器的函数。

  1. 循环元素时,条件应为onchange和 不是i < divs.length
  2. 要查找i <= divs.length内的文字,它应为div,如下所示 而不是innerHTMLvalue可用于表单输入元素 最终用户可以更改哪些值。
  3. 要计算value,应将该值转换为数字 自sum之后使用parseIntparseFloat 元素通常是文本。
  4. 如果您必须将text/value的最终值分配给另一个sum 元素并调用另一种方法,它应该在div之外 环。但是如果你真的需要这个来设置/调用每个循环,那么它 可以在for循环内。
  5. for
    function CalcSum(displayIn, calcClass){
        var sum = 0;
        var displayCell = displayIn;
        var className = calcClass;
      
      console.log('called');
    
        var divs = document.getElementsByClassName(className);
        var args = [];
    
        for (var i = 0; i < divs.length; i++){
    
            //args.push(divs[i].value);
            var val = divs[i].innerHTML;
            args.push(val);
            sum += parseInt(val) * 1;  // It can be parseFloat
        }
      
        document.getElementById(displayCell).value = sum;
        dollarAmount("Form1", displayCell);
    }
    
    // dummy function
    function dollarAmount(form, elm){
      
    }