2014-12-04 1 views
4

: 나는 버튼을 클릭하면, 4에서 4 개 문자열에 소요 자바 스크립트 프로그램이는 "... 시도 잡아라"블록에서는 parseInt() 작업하지 내가 할 노력하고있어

을 텍스트 상자를 양식에 저장하고 해당 문자열을 형식이 지정된 텍스트 영역으로 출력합니다.

function testResults(form){ 
var errorhandle1 = parseInt(document.myForm.Item_Code.value); 
var errorhandle2 = parseInt(document.myForm.Item_Cost.value); 
var errorhandle3 = parseInt(document.myForm.Quantity.value); 
//above variables are for error handling. 
var d = " "; 
var subtotal = parseInt(form.Item_Cost.value) * parseInt(form.Quantity.value); 
var subtotalValue = parseInt(document.myForm.Subtotal.value); 
var testVar = "Item Code: " + form.Item_Code.value + d + 
       "Item Name: " + form.Item_Name.value + d + 
       "Item Cost: " + form.Item_Cost.value + d + 
       "Quantity: " + form.Quantity.value + '\n'; 


document.myForm.myTextarea.value += testVar; 
document.myForm.Subtotal.value = parseInt(subtotal) + subtotalValue; 
document.myForm.Sales_Tax.value = document.myForm.Subtotal.value * salestax; 
document.myForm.Total.value = parseInt(document.myForm.Subtotal.value) + parseFloat(document.myForm.Sales_Tax.value); 
} 

위의 코드

잘 작동, 나는 내 프로그램의 범위에 대한 수행 할 작업을 정확하게 수행합니다. 나는 시도에 달성하기 위해 노력하고있어

try { 
    if ((isNaN(errorhandle3) == true) || (isNaN(errorhandle2) == true)) { 
     throw "Error1"; 
    } 
} catch (e) { 
    if (e == "Error1") { 
     alert("Error! You must enter a number into the qty and cost fields!"); 
    } 
} 

은 ... catch 블록은

document.myForm.Item_Code.value 
document.myForm.Item_Cost.value 
document.myForm.Quantity.value 

실제로 수 있는지 확인하는 것입니다.

try ... catch 문은 프로그램을 실행할 때마다 트리거되며 해당 텍스트 상자에 무엇을 넣어도 상관 없습니다. 나는 이것에 대한 모든 통찰력에 크게 감사 할 것입니다!

기타 :이 링크를 모두보고 내 문제를 이해할 수 없습니다. 여기 javascript parseInt return NaN for empty string http://www.w3schools.com/jsref/jsref_isnan.asp

+4

이 뭔가 주위에/던져 그 자체로하지 않는 간단한을 catch'을'사용하려고 여기 말도 안돼 비교 할 필요가 없습니다. 바로'if' 문을 사용하면 코드가 더 간단 해지고 더 잘 수행됩니다. 여기에 예외는 필요하지 않습니다. – jfriend00

+2

팁 : '== true'에 대해 부울을 테스트하지 마십시오. 그것은 불필요합니다. 'if (isNaN (errorhandle3) || isNaN (errorhandle2))'가 더 잘 읽습니다. – Ryan

+0

빠른 답장을 보내 주셔서 감사합니다. 나는 지금 그것들을 바꾸는 과정에있다. – Fishbones

답변

5

루트 문제는 값이 NaN 경우 isNaN() 테스트를 볼 수 있다는 것입니다. 문자열이 적절한 숫자인지 테스트하지 않습니다. 문자열을 처리하려고하는 강제 규칙이 있지만 실제로 설계된 것은 아닙니다.

뭔가 여기에 유효한 숫자로 구문 분석 할 수있는 경우 테스트 할 수있는 방법을 볼 수 있습니다

: Validate decimal numbers in JavaScript - IsNumeric()

그것은이 좋은 답변에서 세부 사항을 읽을 가치가 있지만, 조금 더 같은 것을 아래로 비등 당신은 필요하지만, 일반적인 목적보다는 :

function isNumber(n) { 
    return !isNaN(parseFloat(n)) && isFinite(n); 
} 

그리고 당신은 그냥 할 수 있도록, 다음 코드에서 예외를 사용할 이유가 없습니다 :

if (!isNumber(errorhandle3) || !(isNumber(errorhandle2)) { 
    alert("Error! You must enter a number into the qty and cost fields!"); 
} 

또한 코드에서 일부 .Value 속성은 .value (소문자) 일 수 있습니다. 첫 번째 코드 블록에서

+0

이것이 내 문제라고 생각하며 지금 시도하고 있습니다. – Fishbones

+0

@Fishbones - '.Value'는'.value'이어야합니다. – jfriend00

+0

그러나 양식 필드에 무한대 번호를 실제로 "입력"할 수는 없습니다. D – Leo

0

var errorhandle2 = parseInt(document.myForm.Item_Cost.Value); 
var errorhandle3 = parseInt(document.myForm.Quantity.Value); 

당신은 value해야하는 Value를 사용하고, 그 대소 문자를 구분합니다. 그런데

, isNaN 반환 부울, 당신은 true

관련 문제