2014-04-12 8 views
1

Douglas Crockford가 설명한 Good Part를 사용하여 JS를 작성하려고하므로 하나의 전역 객체 A이 생성되었습니다. 그러나 내 JS 코드 문제가 있습니다. 변수 value1value2NaN으로 평가되며 이유를 이해할 수 없습니다.개체 리터럴로 addEventListener 사용

나는 두 변수 invoicedtotalInvoicedlastInvoiced 외부를 선언하고 this를 사용하는 방법 내부를 얻기 위해 노력했다. 그러나 이것이 정확한지 나는 모른다. 나는 이러한 변수에 addEventListener을 사용하고 onchange 이벤트를 호출 할 수 있기를 희망했습니다.

value1value2NaN으로 나타 납니까?

두 변수에 onchange 이벤트와 함께 'addEventListener'를 사용하는 코드를 작성하는 방법은 무엇입니까? 그래서, 그 변경 -하지 변수 -

var A = { 

invoiced: document.getElementById("invoiced").value, 
lastInvoiced: document.getElementById("lastinvoiced").value, 
totalInvoiced: function() { 

var invoiced1 = this.invoiced; 
var lastInvoiced1 = this.lastInvoiced; 
var value1 = parseFloat("invoiced1"); 
var value2 = parseFloat("lastInvoiced1"); 

    if(isNaN(value1)) 
     value1 = 0; 
    if(isNaN(value2)) 
     value2 = 0; 

var totalInvoiced1 = value1 + value2; 
var value3 = document.getElementById("daytotal").value = totalInvoiced1 + "€"; 
return value3; 
} 

}; 
window.onload = A.totalInvoiced(); 
A.invoiced.addEventListener("change", A.totalInvoiced, false); 
A.lastInvoiced.addEventListener("change", A.totalInvoiced, false); 
+3

을 당신이 가지고있는 경우'A = {청구 .. .value, ...'및'A.invoiced.addEventListener' 그러면 이벤트 리스너를 _String_에 추가하려고합니까? –

+0

예 객체'A' 속성 인'invoiced'와'lastInvoiced'에서'value' 속성을 제거하십시오 –

+0

@PaulS., 그러면 값으로 이벤트 리스너를 어떻게 추가 할 수 있습니까? 사용자가 'totalInvoiced'에 표시된 요소 값과 결과를 입력하고 변경하면 '청구 된'+ '최종 인보이스'가 계산되도록하고 싶습니다. 제안 된 변경 사항을 수행했지만 여전히 동일한 결과를 산출합니다. – hyprstack

답변

1

첫째, parseFloat("invoiced1");parseFloat("lastInvoiced");문자열invoiced1, lastInvoiced을 평가 :

Here is a jsFiddle link to all of my code.

이 내 JS 코드

parseFloat(invoiced1); 
parseFloat(lastInvoiced); 

두 번째로 값을 가져 오려고하는 <input> 요소에는 실제로 값이 설정되어 있지 않습니다. 여기

<td><input type="number" id="invoiced" class="boxed" />&euro;</td> 

, &euro;<td>의 값이 아닌 <input>이다. 초기 값을 지정해야합니다. 올바르게 작성하면 코드에 NaN을 테스트 할 필요가 없으므로 해당 체크를 제거하십시오. 언급 한 바와 같이


셋째, 당신이 요소의 값이 아닌 요소에 이벤트를 설정하는 - 요소에 자신을을 설정하고, 때로는 A.invoiced.value;이 등 (thisA 대신 this를 사용하여 시도 당신이 다른 방법으로 그것을 호출로 예를 들어, 대신 값을 잡기 위해), 당신의 상황에서 다른 개체를 참조하십시오

invoiced: document.getElementById("invoiced"), 
lastInvoiced: document.getElementById("lastinvoiced"), 
totalInvoiced: function() { 
    var invoiced = A.invoiced.value; 
    var lastInvoiced = A.lastInvoiced.value; 
    ... 

Here's an updated jsFiddle example

+0

당신이 제안한 모든 변경을 했는데도 여전히 같은 문제가 있습니다. 이 프로그램은 사용자가 레지스터에 새로운 값을 삽입 할 때 합계를 실행하지 않습니다. 왜 그런지 모르지만 내 피들에 게시 한 링크에는 이전 버전의 HTML이 있습니다. 빈 값 이었지만 값을 내 input 요소에주었습니다. 제공 한 링크에 동일한 문제가 표시됩니다. 하드 코딩 된 값이'input' 엘리먼트로 설정 될 때 합계를 수행하지만 사용자 입력으로는 실행되지 않습니다. 이것의 뒤에 문제는 무엇 일 수 있 었는가? 'addEventListener'를 올바르게 사용하지 않습니까? – hyprstack

+0

이것은 내 새 링크입니다. http://jsfiddle.net/MMendes/eKeLt/6/ 지금 제대로 업데이트 되었기를 바랍니다. – hyprstack

+0

실제로 JSFiddle에서 실행하면 NaN이 표시됩니다. http://jsfiddle.net/MMendes/eKeLt/6/ 그러나 브라우저에서 정상적으로 실행하면 값을 삽입해야하며 페이지를 새로 고칠 때만 합계가 실행됩니다. 'addEventListener'라고 불리는 방식에 문제가 있습니까? – hyprstack