2012-12-03 9 views
0

JS 기능을 사용하여 일부 양식 필드의 유효성을 검사하려고하지만 제출 단추를 클릭 할 때 필드를로드하거나 확인하지 않는 것 같습니다.JS 양식 유효성 검사가 작동하지 않습니다.

<html> 
    <body> 
    <?php require_once('logic.php'); ?> 
    <h1>Add new Region/Entity</h1> 
    <?php 
     if ($_POST['submitted']==1) { 
     echo $error; 
     } 
    ?> 
    <form action="logic.php" method="post" name="registration" onSubmit="return formValidation();"> 
     Region: <input type="text" name="region" value="<?php echo @$_POST['region']; ?>"><br> 
     Description: <br><textarea name="description" cols="50" rows="10"><?php echo @$_POST['description']; ?></textarea><br> 
     Remarks: <input type="text" name="remarks" value="<?php echo @$_POST['remarks']; ?>"> 
     <input type="hidden" name="submitted" value="1"><br> 
     <input type="submit" value="Submit" onclick=""> 

그리고 여기에는 JS입니다 :

<script type="text/javascript"> 
    function formValidation() { 
    var region = document.registration.region; 
    var descr = document.registration.description; 
    var remarks = document.registration.remarks; 
    if(empty_validation()) { 
     if(reg_validation()) { 
     if(reg_letters()) { 
      if (desc_letters()) { 
      if (desc_validation()) { 

      } 
      } 
     } 
     } 
    } 
    return false; 
    } 
    function empty_validation() { 
    var reg_len = region.value.length; 
    var descr_len = descr.value.length; 
    var rem_len = remarks.value.length; 
    if (reg_len == 0 || decr_len == 0 || rem_len == 0) { 
     alert("Please fill all the fields"); 
     return false; 
    } 
    return true; 
    } 
    function reg_validation() { 
    if (reg_len > 50) { 
     alert("Only 50 characters are allowed in the Region field"); 
     region.focus(); 
     return false; 
    } 
    return true; 
    } 
    function reg_letters() { 
    var letters = /^[A-Za-z]+$/; 
    if(region.value.match(letters)) { 
     return true; 
    } else { 
     alert('Region field must have only alphabetical characters'); 
     region.focus(); 
     return false; 
    } 
    } 
    function desc_validation() { 
    if (descr_len > 500) { 
     alert("Only 500 characters are allowed in the description field"); 
     descr.focus(); 
     return false; 
    } 
    return true; 
    } 
    function desc_letters() { 
    var iChars = "[email protected]#$%^&*()+=-[]\\\';,./{}|\":<>?"; 
    for (var i = 0; i < descr_len; i++) { 
     if (iChars.indexOf(descr.value.charAt(i)) != -1) { 
     alert ("Your description has special characters. \nThese are not allowed.\n Please remove them and try again."); 
     return false; 
     } 
    } 
    return true; 
    } 
</script> 
</form> 
</body> 
</html> 

당신이 볼 수 있듯이, 나는 PHP 파일 형식의 값을 게시하도록하겠습니다. 그리고 폼 태그에 onSubmit 이벤트를 사용하여 formValidation() 함수를 초기화했습니다. 어떤 이유로 작동하지 않습니다.

여기에 a working example이 필요합니다.

+0

가 디버깅을 시도 해 봤나? 유효성 검사에 오류가 있습니다 - "지역이 정의되지 않았습니다":'var reg_len = region.value.length; ' – Ian

+0

작동하지 않습니다! 도움이되지 않습니다. 예상되는 것은 무엇입니까? 무슨 일 이니? –

+0

하나의 함수에서 Javascript 변수를 선언 한 다음 모든 함수에서 Javascript 변수를 사용할 수 있다고 기대할 수는 없습니다. 그것들을 사용하기 위해서는 모든 함수에서 선언해야합니다. – Ian

답변

1

나는 당신이 가진 모든 작은 오류를 고쳐 내지 않을 것이지만, 주된 문제는 변수가 예상되는 곳에 정의되지 않는다는 것입니다. 한 함수에서 변수를 선언 할 수는 없으며 매개 변수로 전달하거나 전역으로 선언하지 않고도 다음 함수에서 변수를 사용할 수 있다고 기대할 수 있습니다. 예를 들어, empty_validation 기능이 있어야한다 :

function empty_validation(region, descr, remarks) { 
    var reg_len = region.value.length; 
    var descr_len = descr.value.length; 
    var rem_len = remarks.value.length; 

    if (reg_len == 0 || decr_len == 0 || rem_len == 0) { 
     alert("Please fill all the fields"); 
     return false; 
    } 
    return true; 
} 

그리고 당신의 formValidation 기능에

, 당신은 다음과 같이 호출 :

if(empty_validation(region, descr, remarks)) { 

이것은 단지 하나의 예이며, 당신이 그것을 할 필요가있을 것이다 몇 군데.

다른 몇 가지 - 항상 formValidation에서 false을 반환합니다 ... return true;을 가장 안쪽의 if 문에 넣었습니까? 또한, 모든 때문에 당신이 그 각각의 기능을 호출하는 일을 할 것, 당신은 아마 다음과 같이 하나의 큰 if 문에 넣어 수 있습니다

if (empty_validation() && reg_validation() && reg_letters() && desc_letters() && desc_validation()) { 
    return true; 
} 
return false; 
+0

감사합니다. http://appinventr.com/Task/interface.php 최초의 유효성 검사가 작동하는 동안 (필드가 비어있는 경우 경고가 표시 될 때 다소)가 경고를 기각 한 후 작동하지 않습니다. 코드를 편집하고 제안한 변수를 포함 시켰습니다. 해당 링크에 있습니다. – 17andLearning

+0

@AnimeshTripathi 이것을 디버깅 할 수 있습니까? 예를 들어 Firebug 또는 Developer Tools를 사용하여 브라우저의 콘솔에서 어떤 일이 일어나는지 살펴볼 수 있습니까? 어쨌든, 새로운 오류는 "decr_len이 정의되지 않았습니다"입니다 : if (reg_len == 0 || decr_len == 0 || rem_len == 0). , decr_len''사이' – Ian

+0

@AnimeshTripathi을 descr_len' 그리고'desc_validation' 기능을 위해, 당신은 deacr''로 매개 변수를 설정하지만'오타가 당신을 귀찮게 – Ian

관련 문제