0

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 = "!@#$%^&*()+=-[]\\\';,./{}|\":<>?";
    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()関数を初期化しました。何らかの理由で機能していません。

必要な場合の実際の例を次に示します。

4

1 に答える 1

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)) {

これはほんの一例であり、いくつかの場所で行う必要があります。

他のいくつかのこと - あなたはいつも...falseから戻ってきます...あなたは、最も内側のステートメントの中formValidationに入れるつもりでしたか? また、これらの各関数を呼び出すだけのように見えるので、おそらく次のように 1 つの大きなステートメントにまとめることができます。return true;ifif

if (empty_validation() && reg_validation() && reg_letters() && desc_letters() && desc_validation()) {
    return true;
}
return false;
于 2012-12-03T15:22:35.007 に答える