2010-03-10 5 views
0

Это связанный с тем вопрос, который я опубликовал ранее ... Я пытаюсь суммировать все элементы ввода, которые начинаются с '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> 
+0

в вашем коде есть "]" отсутствует в этой строке: "var v = $ (" input [name = totalpull] "). Val();' –

+0

, добавляя, – whitman6732

+0

Существует проблема с вашей разметкой: вам нужно обернуть 'totalpull' в' 'пару. Кроме того, стандартное размещение '' находится между '' и' '. –

ответ

0

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

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

Там нет replace на число. Вам нужен toString выкинули:

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

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

0

В функции sumValues, вы повторив «вход [имя = нагрузочный]» селектор. Вы должны либо передать селектор в свою функцию, либо действовать на значения, которые у вас уже есть.

В sumValues ​​«это» должно быть сборкой входов. Таким образом, вы должны быть в состоянии сделать что-то вроде:

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

Вы также получили «вход» и «: вход» спутать. «input» - это входной тег. : вход - любой ввод или тег.

+0

У меня нет проблемы с функцией sum. Это функция avgValues, о которой я рассказывал. – whitman6732

+0

Извините, я не обращал столько внимания, сколько должен был. Почему вы удаляете символы из (v/rowCount)? Похоже, это именно то значение, которое вы хотите. Ваше регулярное выражение выглядит мне напуганным из-за второго '-'; Я не уверен, что это будет соответствовать. По крайней мере, уберите это. Это, я думаю, что вы хотите сделать что-то вроде: var input = $ ('input [name^= pull]'); var avg = inputs.sumValues ​​()/input.length; Вы страдаете от чрезмерного усложнения. Упростите код, и решение должно появиться довольно быстро. – CWF

0

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

$('input[name=totalpull]').bind('keyup', function() { 
    var inp = $('input[name^=pull]'); 
    inp.val(parseFloat($(this).val())/inp.length); 
});​ 
+0

Поместите это там, и ошибки ушли, но все равно не вычисляли каждое поле ввода ... – whitman6732

+0

Пожалуйста, проверьте свою разметку, когда я прокомментировал ... Я сделал тестовый пример здесь: http: // jsfiddle.net/V54gC/можете ли вы проверить и посмотреть, что отличается от вашего дела? –

Смежные вопросы