0

何が問題なのですか、なぜそれが機能しないのですか...

 <script language="JavaScript" type="text/javascript">


//function to check empty fields

function isEmpty(strfield1, strfield2) {
  //change "field1, field2 and field3" to your field names

  strfield1 = document.forms[0].name.value 
  strfield2 = document.forms[0].email.value

  //name field

  if (strfield1 == "" || strfield1 == null || !isNaN(strfield1) || strfield1.charAt(0) == ' ') {
    alert( "Name is a mandatory field.\nPlease amend and retry.")
    return false;
  }

  //EMAIL field 
  if (strfield2 == "" || strfield2 == null || !isNaN(strfield2) || strfield2.charAt(0) == ' ') {
    alert(" Email is a mandatory field.\nPlease amend and retry.")
    return false;
  }
  return true;
}


//function to check valid email address

function isValidEmail(strEmail){
  validRegExp = /^[^@]+@[^@]+.[a-z]{2,}$/i;
  strEmail = document.forms[0].email.value;

 // search email text for regular exp matches

  if (strEmail.search(validRegExp) == -1)  {
    alert('A valid e-mail address is required.\nPlease amend and retry');
    return false;
  } 
  return true; 
}


//function that performs all functions, defined in the onsubmit event handler

function check(form)){
  if (isEmpty(form.field1)){
    if (isEmpty(form.field2)){
      if (isValidEmail(form.email)){
        return true;
      }
    }
  }
}
return false;
}

</script>

何もしないそこに何が起こっているのか理解できない形でこれも入れる

<form onsubmit="return check(this);" action="sendquery.php" name="contquery">
4

2 に答える 2

3

一見:@FishBasketGordoで示されているようにブラケットが多すぎるため、繰り返しません

一見-フィールドを渡し、フィールド値をテストしません

3 番目の一見: 関数に正しい名前を渡さない

4 番目の一見 - isEmpty は、空の場合に false を返します。true を返す必要があります

私はそれらすべてを修正しました

デモはこちら

ページを完成させて、何がどこにあるのかを示します。フォームで目立たないイベント処理を行うように更新されました

<html>
<head>
<title>Validation</title>
<script type="text/javascript">

// trim for IE
if(typeof String.prototype.trim !== 'function') {
  String.prototype.trim = function() {
    return this.replace(/^\s+|\s+$/g, '');
  }
}

//function to check empty fields

function isEmpty(objfld) {
  var val = objfld.value;
  if (val.trim() == "" || val == null) {
    alert(objfld.name+" is a mandatory field.\nPlease amend and retry.");
    objfld.focus();
    return true;
  }
  return false;
}

//function to check valid email address

function isValidEmail(objEmail){
  var validRegExp = /^[^@]+@[^@]+.[a-z]{2,}$/i;
  var strEmail = objEmail.value;
  if (strEmail.match(validRegExp)) return true;
  alert('A valid e-mail address is required.\nPlease amend and retry');
  objEmail.focus();  
  return false;
}

//function that performs all functions, defined in the onsubmit event handler

function validate(form) {
  if (isEmpty(form.name)) return false;
  if (isEmpty(form.email)) return false;
  return isValidEmail(form.email);
}


window.onload=function() {
  document.getElementById("form1").onsubmit=function() {
    return validate(this);
  }
}

</head>
<body>
<form id="form1">
  Name:<input type="text" name="name" /><br/>
  Email:<input type="text" name="email" /><br/>
  <input type="submit" />
</form>    
</body>
</html>
于 2012-05-14T11:24:44.600 に答える
2

おそらく機能しない主な理由は、構文エラーです。

// Syntax error ----v
function check(form)){
    if (isEmpty(form.field1)){
        if (isEmpty(form.field2)){
            if (isValidEmail(form.email)){
                return true;
            }
        }
    }
}
// The return statement should be above the previous closing bracket 
// and the final closing bracket removed.
return false;
}

最初の行に余分な閉じ括弧があり、閉じ括弧が多すぎます。これをFireBugChrome Developer Toolsなどのツールで開くと、これについて自動的に通知されます。

于 2012-05-14T11:21:29.303 に答える