2013-06-19 2 views
0

누구든지이 간단한 자바 스크립트가 작동하지 않는 이유를 알고 있습니까? 클래스 "t1"의 css를 display : none에서 display : inline으로 변경하여 입력이 비어있을 때 표시되도록 설정합니다. 제출자바 스크립트 간단한 유효성 검사가 작동하지 않습니까?

왜 작동하지 않는지 이해할 수 없습니까?

function validate() { 

if(document.quote.firstname.value == "") 

{document.getElementByClassName('t1').style = 'display: inline;'; 
    } 

} 

HTML :

<form name="quote" method="post" action="" onSubmit="validate();"> 

<fieldset> 
<legend>Contact Information</legend> 

<div> 
<label>*First Name:</label><span class="t1">Please enter your name</span> 
<input name="firstname" type="text"/> 
</div> 

</fieldset> 

<div id="f-submit"> 
<input name="Submit" value="Submit" type="submit"/> 
</div> 

</form> 

CSS 당신이 찾아 낼 수있는 경우에

은 어디에 문제가

자바 스크립트 (BTW 난 순수 자바 스크립트에서 이것을 유지하려는) 정말 고마워요 :

.t1{ 
display: none; 
font-size:13px; 
color: #F33; 
text-align: right; 
} 

답변

1

제안 1 : 당신이

그들을 쉽게 액세스 할 수 있도록 ID가 태그에 속성을 넣어

제안 2 : onsubmit 속성을 onsubmit="return validate()"

로 지정하십시오.

제안 3 : getElementByClassName이 없습니다. getElementsByClassName은 배열을 반환하므로 어떤 배열을 선택하거나 반복해야합니다. IE, document.getElementsByClassName('t1')[0]

제안 4 : 양식을 제출하지 않으려면 validate 함수가 false를 반환하고 제출해야하는 경우 true를 반환해야합니다.

자바 스크립트 :

function validate() { 

    if(document.getElementById("firstname").value == "" || document.getElementById("firstname").value == null) 
    { 
    document.getElementsByClassName('t1')[0].setAttribute('style','display: inline;'); 
    return false; 
    } 
    return true; 
} 

HTML :

내가 그것을 확장
<form name="quote" method="post" action="" onSubmit="return validate()"> 

<fieldset> 
<legend>Contact Information</legend> 

<div> 
<label>*First Name:</label><span class="t1">Please enter your name</span> 
<input id="firstname" name="firstname" type="text"/> 
</div> 

</fieldset> 

<div id="f-submit"> 
<input name="Submit" value="Submit" type="submit"/> 
</div> 

</form> 
+0

이라는 점을 지적 해 주셔서 감사합니다. 매우 유익합니다! 너무 자세히 설명하고 반환 거짓에 대해 지적하고 진정한 반환 주셔서 감사합니다 – Ned

1

document.getElementByClassName이 없습니다. getElementsByClassName을 의미합니까? 스타일 속성이 아닌 display 스타일을 직접 설정해야합니다. 또한 양식 제출을 취소해야하는 경우 제출시 validate()를 반환하고 취소하려면 false를 반환해야합니다. 나는 그것을 바이올린에도 넣었다.

은 나뿐만 아니라 당신을 위해 jsFiddle을했습니다 : http://jsfiddle.net/rgthree/g4ZvA/2/

<form name="quote" method="post" action="" onSubmit="return validate();"> 

JS :

function validate() { 
    if(document.quote.firstname.value == ""){ 
    document.getElementsByClassName('t1')[0].style.display = 'inline'; 
    return false; // Return false will cancel the submit, causing the page to not load the form action action 
    } 
    return true; 
} 
+0

, 당신은 같은 디스플레이 설정해야합니다'.style.display = '인라인','대신'style' 속성을 설정 . 또한 이벤트를 취소하지 않습니다. 기본값을 취소하거나 false를 반환해야합니다. 나는 당신이 질문의 일부가 아니기 때문에 당신이 그것을 다른 곳에서 다루고 있다고 가정합니다. – rgthree

+0

감사합니다, 나는 밖으로 놓쳤습니다. 당신의 솔루션은 단지 깜박이고 눈에 띄지 않는 것을 제외하면 효과가 있습니까? – Ned

+0

@ 네드 네, 바이올린을 확인하십시오. 양식이 제출됩니다. 나는 그것을 바이올린에 고정시켰다. 답을 업데이트 할 수 있습니다. 방금 이미 다른 곳에서 양식을 취소 한 것으로 가정했습니다 (양식 제출을 중단하는 것과 관련한 질문이 아닙니다). 나는 그것을 새롭게 할 것이다 – rgthree

관련 문제