2010-03-31 6 views
0

저는 자바 스크립트와 초보 프로그래머가 처음이므로 대답하기가 쉽지 않을 수 있습니다. x 필드의 값을 반복하여 최종 필드의 합계를 표시하려면이 필드를 추가하고 싶습니다. 명시 적으로 각 필드를 호출하면이 함수를 수행 할 수 있지만이 필드를 유연하게 처리 할 수 ​​있도록 추상화하려고합니다. 여기에 나와있는 예제 코드가 있습니다 (저에게는 효과가 없습니다). 내가 어디로 잘못 가고 있니?자바 스크립트를 사용하여 불확실한 수의 필드 추가하기

<html> 
<head> 
<script type="text/javascript"> 
function startAdd(){ 
    interval = setInterval("addfields()",1); 
} 
function addfields(){ 
    a = document.addition.total.value; 
    b = getElementByTagName("sum").value; 
    for (i=0; i<=b.length; i++){ 
     a+=i; 
    } 
    return a; 
} 
function stopAdd(){ 
    clearInterval(interval); 
} 
</script> 
</head> 

<body> 

<form name="addition"> 

<input type="text" name="sum" onFocus="startAdd();" onBlur="stopAdd;"> 
+ <input type="text" name="sum" onFocus="startAdd();" onBlur="stopAdd;"> 
= <input type="text" name ="total"> 

</form> 

</body> 
</html> 

답변

0

코드에 'sum'이라는 태그가 없습니다. 입력 태그에 클래스 속성을 사용하고 getElementsByTagName('input')을 사용하여 관련 클래스가 있는지 확인하는 것이 좋습니다. jQuery는 한 줄로 특정 클래스의 모든 요소를 ​​선택할 수 있기 때문에 이것을 매우 단순하게 만듭니다 : $(".className"). jQuery를 사용하지 않으려면 this question이 좋습니다.

0

나는 JQuery와 라이브러리를 사용하여 추가 할 모든 요소를 ​​얻을 수있는 패턴 일치를 수행 한 다음 출력 필드에

1

이 코드 문제 두 가지가 있음을 둘 것입니다.

첫 번째

는 :

b = getElementByTagName("sum").value; 

당신은 아마 (추가 s 통지) getElementsByTagName을 의미한다. 또한 아무런 결과가 없으므로 아무런 문제가없는 <sum> 요소가 없습니다. 마지막으로 .value은 배열의 value 속성을 반환합니다 (아무 것도 없기 때문에 undefined이 반환 됨). 각 요소의 value 속성 배열이 아닙니다.

이러한 문제를 해결하기 위해, 당신은이처럼 쓸 수 있습니다 :

inputElements = getElementsByTagName('input'); 
sumValues = [ ]; 

for(i = 0; i < inputElements.length; ++i) { 
    if(inputElements[i].name == 'sum') { 
     sumValues.push(inputElements[i].value); 
    } 
} 

또는 jQuery를에을 :

sumValues = $('input[name=sum]').map(function() { 
    return this.value; 
}); 

두 번째를 :

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

b.length은의 수를 설명합니다 집단. <=을 사용하면 존재하지 않는 b[b.length]에 액세스하고 있습니다. 최대 b[b.length - 1]에 액세스하려고하므로 가장 쓸데없는 방법은 <= 대신 <을 사용하도록 조건을 다시 작성하는 것입니다. 즉 :

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