2010-03-10 9 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 필요합니다 (V가 같은)

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

은 BTW, 문자열을도없는 /있다,하지만 자바 스크립트는 당신을 위해 그것을 변환하고 당신에게 NaN이없는 경우를 제공하기 위해 노력할 것입니다.

0

sumValues ​​함수에서 'input [name^= pull]'선택기가 반복됩니다. 선택기를 함수에 전달하거나 이미 가져온 값에 대해 조치를 취해야합니다.

sumValues에서 'this'는 입력 컬렉션이어야합니다. 따라서, 당신은 같은 것을 할 수 있어야한다 :

또한 '입력'하고있어
$.fn.sumValues = function() { 
    var sum = 0; 
    this.each(function() { 
    sum += $(this).val(); 
    }); 
    return sum; 
} 

'입력'혼란. '입력'은 입력 태그입니다. : input은 입력 또는 선택 태그입니다. 총 합계가 수동으로 변경

+0

sum 함수에 문제가 없습니다. 그것은 내가 게시 한 avgValues ​​함수입니다. – whitman6732

+0

미안하지만, 내가해야 할만큼 많은 관심을 기울이지 않았습니다. (v/rowCount)에서 문자를 삭제하는 이유는 무엇입니까? 그게 바로 당신이 원하는 가치 인 것 같습니다. 당신의 정규식은 두 번째 '-'때문에 나에게 펑키하게 보입니다. 나는 그게 어울릴 지 모르겠다. 적어도 그걸 가져 가라. 당신이하고 싶은 일은 다음과 같습니다 : var inputs = $ ('input [name^= pull]'); var avg = inputs.sumValues ​​()/inputs.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/귀하의 케이스와 다른 점을 확인하고 확인할 수 있습니까? –