Расчет среднего - PullRequest
       15

Расчет среднего

0 голосов
/ 10 марта 2010

Это связанный вопрос с вопросом, который я опубликовал ранее ... Я пытаюсь суммировать все входные элементы, которые начинаются с 'pull' и помещают эту сумму в поле ввода 'totalpull'. У меня эта часть работает. Теперь я пытаюсь вычислить среднее значение, если пользователь вводит что-то вручную в поле ввода 'totalpull' и устанавливает для каждого ввода 'pull' это значение. Попытка ниже, но это не работает ...

//This is the sum formula, which works
        $('input[name^=pull]').bind('keyup', function() {
                $('#totalpull').val( $('input[name^=pull]').sumValues() );
        });

        $.fn.sumValues = function() {
                var sum = 0; 
                $("input[name^='pull']").each(function() {
                        if ( $(this).is(':input') ) {
                                var val = $(this).val();
                        } else {
                                var val = $(this).text();
                        }
                        sum += parseFloat( ('0' + val).replace(/[^0-9-\.]/g, ''), 10 );
                });
                return sum;
        };


//This is the avg formula, which does not work
//Keep getting v / rowCount.replace is not a function
        $('input[name=totalpull]').bind('keyup', function() {
                $('input[name^=pull]').each(function() {
                        $(this).val( $('input[name=totalpull').avgValues() );
                });
        });
        $.fn.avgValues = function() {
                var avg = 0;
                var v = $("input[name=totalpull").val();
                var rowCount = $("#convertRow tr").length; 
                avg += parseFloat( (v / rowCount).replace(/[^0-9-\.]/g, ''), 10);
                return avg;
        }

<table id="convert">
<tbody>
<tr><td><input type="text" value="" name="pull0" /></td></tr>
<tr><td><input type="text" value="" name="pull1" /></td></tr>
<tr><td><input type="text" value="" name="pull2" /></td></tr>
<tr><td><input type="text" value="" name="pull3" /></td></tr>
</tbody>

<tfoot>
<input type="text" id="totalpull" name="totalpull" value="" />
</tfoot>
</table>

Ответы [ 3 ]

0 голосов
/ 11 марта 2010

Когда общая сумма изменяется вручную, значение распределяется в поле «pull *»:

$('input[name=totalpull]').bind('keyup', function() {
    var inp = $('input[name^=pull]');
    inp.val(parseFloat($(this).val()) / inp.length);
});​
0 голосов
/ 11 марта 2010

Ваша непосредственная проблема - просто синтаксическая ошибка:

 avg += parseFloat( (v / rowCount).replace(/[^0-9-\.]/g, ''), 10);

На номере нет replace. Вам нужно добавить toString:

 avg += parseFloat( (v / rowCount).toString().replace(/[^0-9-\.]/g, ''), 10 );

Кстати, для строки также нет / (например, v is), но JavaScript попытается преобразовать ее для вас и выдаст NaN, если не сможет.

0 голосов
/ 10 марта 2010

В вашей функции sumValues ​​вы повторяете селектор input [name ^ = pull]. Вы должны либо передать селектор в свою функцию, либо действовать на основании уже полученных значений.

В sumValues ​​'this' должно быть набором входных данных. Следовательно, вы должны быть в состоянии сделать что-то вроде:

$.fn.sumValues = function() {
  var sum = 0;
  this.each(function() {
    sum += $(this).val();
  });
  return sum;
}

Вы также перепутали 'input' и ': input'. 'input' - это тег ввода. : ввод - любой ввод или выбор тега.

...