返回'undefined'的多层javascript函数

时间:2015-07-11 17:59:29

标签: javascript

这可能很简单,只是错过了我应该如何返回这些数据。

var sumInputs = function (input) {
  var reloadData = function () {  
    var sum = 0;
    $(input).each(function() {
        sum += Number($(this).val());
    }); 
    return sum;
  };

  $(window).ready(function () {                  
    var changeOn = $(input);
    changeOn.on('change', function () {
      var data = reloadData();
    });
    changeOn.trigger('change');
  });
};

var sum = sumInputs('.feature');
console.log(sum);

现在我的结果是undefined。这是我的jsfiddle:http://jsfiddle.net/bk97qc4L/

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您的sumInputs是一个接受一个参数并且不返回任何内容的函数。因此sum评估为undefined

sumInputs内,您声明了一个变量reloadData(作为一个函数),并在窗口准备就绪时使一个事件绑定运行。您没有指定任何返回值,甚至没有执行函数reloadData

我怀疑这就是你想要的:http://jsfiddle.net/bk97qc4L/1/

答案 1 :(得分:0)

$(document).ready(function () {                  
   function sumInputs(input, output) {
      var $input = $(input);
      
      function reloadData() {  
        var sum = 0;
        $(input).each(function() {
            sum += Number($(this).val());
        }); 
        return sum;
      };
    
      $input.on('change', function () {
          $('#output').val(reloadData());
        });
   };
    
    sumInputs('input.feature','#output');
    $('input.feature').change(); // for first time output
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
    <tr><td><input type="text" class="feature" value="10" /></td></tr>
    <tr><td><input type="text" class="feature" value="10" /></td></tr>
    <tr><td><input type="text" class="feature" value="10" /></td></tr>
    <tr><td><input type="text" class="feature" value="10" /></td></tr>
</table>

<label for="output">Output:</label>
<input type="text" id="output" />