2016-07-14 4 views
-1

세 개의 텍스트 상자를 만들었습니다. 처음 두 개의 텍스트 상자는 두 개의 숫자 (뺄셈)입니다. 결과는 세 번째 텍스트 상자에 나타납니다. 사용자가 숫자 대신 문자를 입력하면 경고가 발생하도록 노력하고 있습니다.isNaN 함수가 제대로 작동하지 않습니다.

지금은 isNaN이 작동하지 않습니다. 첫 번째 또는 두 번째 텍스트 상자에 무엇이든 입력 할 때마다 번호 나 문자에 관계없이 경고합니다. 여기 내 코드가있다.

function myFunction() { 
    var x = document.getElementById("taxFree"); //textbox 1 
    var y = document.getElementById("prodCost"); //textbox 2 
    var res = document.getElementById("salesMargin"); //Result textbox 

    // If x or y is Not a Number, send alert to user 
    if (isNaN(x) || isNaN(y)) { 
     alert("Numers only!"); 
     return; 
    } 
    res.value = x.value - y.value; 
} 

미리 감사드립니다. valueinput의 확인

+0

y'있다'는 HTML 너무 –

+1

'x'를 붙여 *이

코드 입력 입력의 문자 확인하여 그렇게 DOM 요소 *. 그들은 항상 숫자가 아닙니다. 그들의 내용을 명시 적으로 int로 변환해야합니다. – deceze

답변

4

보십시오 : 값이 특수 값 NaN에 동일한 경우

if (isNaN(x.value) || isNaN(y.value)) { 
+0

놀라움을 피하기 위해 기수를 제공하는 것이 좋습니다 :'parseInt (x.value, 10)'. – deceze

+3

그러나 isNaN() 메서드는 결과가 NaN인지 테스트하기 전에 이미 인수를 숫자로 변환하려고합니다. 그렇다면'parseInt() '를 어떻게 추가하면 도움이 될까요? – nnnnnn

+0

@nnnnnn 네 말이 맞습니다. 업데이트 된 답변. –

1

isNaN 기능을 알려줍니다. 문자열 인 경우 해당 문자열을 구문 분석하려고 시도합니다. isNaN은 숫자가 아닌 모든 값에 대해 true를 반환하지 않습니다 (예 : isNaN(true) === false).

다른 것은 입력 값 요소가 아닌 입력 요소 자체에 isNaN을 호출하는 것입니다. 대신이 시도 :

function myFunction() { 
 
    var taxFree = document.getElementById("taxFree"); 
 
    var prodCost = document.getElementById("prodCost"); 
 
    var salesMargin = document.getElementById("salesMargin"); //Result textbox 
 

 
    var x = parseFloat(taxFree.value); 
 
    var y = parseFloat(prodCost.value); 
 
    // If x or y is Not a Number, send alert to user 
 
    if (isNaN(x) || isNaN(y)) { 
 
     alert("Numers only!"); 
 
     return; 
 
    } 
 
    salesMargin.value = x - y; 
 
}
<input id="taxFree" value="15"> 
 
<input id="prodCost" value="10"> 
 
<input id="salesMargin" value="x"> 
 
<button onclick="myFunction()">Go!</button>

+0

@JohnBurger 잘못되었습니다. 'asd'를 치고 무슨 일이 일어나는 지보십시오. –

+0

@JohnBurger 당신 말이 맞다는 것을 의미하지만, 당신은'parseFloat'에 대한 호출을 보지 못했습니다. –

+0

@JohnBurger - isNaN() 함수는 인수를 숫자로 변환하려고 시도한 다음 해당 변환 결과가 NaN인지 알려주므로 isNaN ("abc")'이 true를 반환합니다. Tamas -'parseFloat()'를 추가하는 것은 도움이되지 않습니다. 왜냐하면 사용자가''123abc "'를 입력하면 숫자가'123'으로 받아 들여지기 때문에 오해의 소지가 있기 때문입니다. – nnnnnn

0

난 당신이 입력 한 입력이 숫자인지 아닌지 알고 싶다면이 방법이 작동하지 않습니다 말해야한다.

이 기능을 사용해보십시오.이 함수는 0에서 9까지의 숫자 만 허용하며, 소수점 이하는 허용되지 않습니다. 다음과 같이 onkeypress='return event.charCode >= 48 && event.charCode <= 57'

단지 귀하의 의견이 줄을 추가합니다 :

<input id="taxfree" onkeypress='return event.charCode >= 48 && event.charCode <= 57'> 
+0

사용자가 편집 메뉴 또는 drag'n'drop을 통해 글자를 넣으면 어떻게 될까요? – nnnnnn

+0

글쎄, 입력을 제한하기 때문에 붙여 넣기 한 요소를 끌어서 놓기 만하면이 필터를 사용할 수 없게됩니다. ( –

관련 문제