2012-05-05 2 views
0

나는 정말로 뭔가 붙어있는 것 같습니다. 모든 양식 입력 필드가 null인지 또는 ""괜찮은지를 확인하는 기능이 있지만 자바 스크립트 배열에 모든 필드를로드 한 다음 for 루프를 수행하여 다른 방법이 있는지 확인하고 싶습니다. 어떤 필드가 비어 있는지 확인하기 위해 if 문과 함께, 불행하게도 나는 이것을 작동시키고 궁금해하는 것처럼 보일 수 없다.양식 입력 필드를 자바 스크립트 배열로로드 한 다음 유효성을 검사

function checkform() 
{ 
    if(checkempty) 
    { 
    display_errormessage("One or more fields empty!"); 
    } 
    else 
    { 
    alert("Thanks for you input!"); 
    } 
} 

display_errormessage() 함수는 단지를 표시하는 양식의 상단에있는 사업부에 오류 메시지를 넣 하나입니다 : 다음 다른 기능을 사용

function checkempty() 
{ 
    fname = document.getElementById("firstname").value; 
    lname = document.getElementById("lastname").value; 
    fage = document.getElementById("age").value; 
    addressl1 = document.getElementById("addressline1").value; 
    addressl2 = document.getElementById("addressline2").value; 
    ftown = document.getElementById("town").value; 
    fcounty = document.getElementById("county").value; 
    fpcode1 = document.getElementById("pcode1").value; 
    fpcode2 = document.getElementById("pcode2").value; 
    ftelephone = document.getElementById("telephone").value; 
    fcomment = document.getElementById("comment").value; 

    var myArray = []; 
    myArray[0] = fname; 
    myArray[1] = lname; 
    myArray[2] = fage; 
    myArray[3] = addressl1; 
    myArray[4] = addressl2; 
    myArray[5] = ftown; 
    myArray[6] = fcounty; 
    myArray[7] = fpcode1; 
    myArray[8] = fpcode2; 
    myArray[9] = ftelephone; 
    myArray[10] = fcomment; 

    for(i=0;i<myArray.length;i++) 
    { 
     if(!myArray[0]) 
     { 
      return true; 
     } 
    } 
    return false; 
} 

: 여기 내 코드입니다 양식이 불완전한 경우 오류 메시지가 표시됩니다.

내가 잘못 본 사람이 있습니까?

미리 도움을 청하십시오!

데이브.

+1

코드에서 루프의 배열에있는 첫 번째 요소 만 검사합니다. 나는 당신이 if (! myArray [0])보다는 if (! myArray [i])라고 말하는 것을 의미한다고 생각합니다. – kinakuta

+0

코드를 변경했지만 모든 필드를 채운 후에도 경고 상자에 감사 메시지를 표시하는 대신 필드 중 하나가 여전히 비어 있다고 주장합니다. 어떤 아이디어? – GeordieDave1980

답변

0

첫째, 기능 checkform가 호출되지 않습니다. if (checkform)if (checkform())이어야합니다. 그렇지 않으면 결과가 아닌 기능의 가용성 만 테스트합니다.

그런 다음 if (!myArray[0])if (!myArray[i])뿐만 아니라

또는 더 나은, if (myArray[i].length==0) 명시 적으로 빈 문자열을 테스트해야하고 단지 암시 부울 변환을 수행하지 않도록 FIRSTNAME을 테스트하는 것 (자바 스크립트에 대한 평가 0==""true 등)

0

if(!myArray[0])if(!myArray[i])이어야하지만 큰 값은 해당 값이 falsey (null, '', 0, false 등)가 아닌지 확인하는 것입니다. 작업에 적합하지 않습니다.

+0

왜 제대로하지 못하는지 잘 모르겠습니다. 배열을 통해 반복하고 필드가 비어 있는지 확인한 다음 오류 메시지가 표시되면 경고 상자에 입력 해 주셔서 감사합니다! 나는 이것을 시도 : if (myArray [i] == null || myArray [i] == "") { return true; } 그 중 하나가 작동하지 않습니다 :-( – GeordieDave1980

0

이미이 기능을 필요로하지 않으므로 추후에 도움이 될 수 있으므로 여기에 남겨 두겠습니다. JSFiddle

function checkform() 
{ 
    arr1 = document.getElementsByTagName('input'); 
    arr1 = Array.prototype.slice.call(arr1); 
    arr2 = document.getElementsByTagName('textarea'); 
    arr2 = Array.prototype.slice.call(arr2); 
    arrs = arr1.concat(arr2); 

    for(i=0;i<arrs.length;i++) 
    { 
     if (arrs[i].type == "text" || arrs[i].type == "textarea") 
     { 
      if (arrs[i].value == '') 
      { 
       alert("Fill all fields before submitting!"); 
       return false; 
      } 
     } 
    } 
    alert("Thanks for your input!"); 
    return true; 
} 
+0

불행히도 그들 중 하나는 의견을 제공하기위한 텍스트 영역이며, 물론 입력 중 하나는 제출 버튼입니다 – GeordieDave1980

+0

완료했습니다! 도움을 주셔서 감사합니다. 나는 당신이 제안한 코드를보고 나서 잘못되었다. – GeordieDave1980

+0

오, 다행이라고 생각합니다. P 필자는 또한 필자의 기능을 수정 했으므로 입력 텍스트 및 텍스트 영역에서 의도 한대로 작동해야합니다. –

0

당신의 input 필드 form라는 이름의 형태에 있는지 따르면

var allTrue = [].every.call(document.forms.form.elements, function(el) { 
    return !!el.value; 
}); 
if (allTrue) { 
    alert("Thanks for your input!"); 
} 
else { 
    alert("Some fields are missing!"); 
} 
관련 문제