简体   繁体   中英

Form Validation (JavaScript), unsure why it's not working. (No errors, but messagebox doesn't appear)

Basically, I tried to add a form to my website and when the Confirm/Submit button is clicked, the program with check if the Name & e-mail form have to the correct information, otherwise a warning will be displayed.

<script language="javascript" type="text/javascript">
function validateForm()
{
var x=document.forms["form1"]["name"].value;
if (x==null || x=="")
  {
  alert("Please enter your name");
  return false;
  }
}
function validateForm()
{
var x=document.forms["form1"]["e-mail"].value;
var atpos=x.indexOf("@");
var dotpos=x.lastIndexOf(".");
if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length)
  {
  alert("Please enter your e-mail address");
  return false;
  }
}
</script>
</head>
<body>

    <h2>Form</h2>
    <p>Note: Please fill in the following fields below, thank you.</p>
    <form id="form1" name="form1" method="post" action="post">
      <p>
        <label for="name">Name:</label> 
        <br />
        <input type="text" name="name" id="name" />
      </p>
      <p>
        <label for="e-mail">E-mail:</label>
        <br />
<input type="text" name="e-mail" id="e-mail" />
      </p>
      <p>
        <label for="msg">Message:</label>
      </p>
      <p>
        <textarea name="msg" id="msg" cols="45" rows="5"></textarea>
      </p>
      <p>
        <input type="button" name="Confirm" id="Confirm" value="Submit" />
      </p>
      <!-- end .content -->
    </form>
  </div>
  <div class="sidebar2">
    <h4>&nbsp;</h4>
    <p>&nbsp;</p>
    <p><!-- end .sidebar2 --></p>
  </div>
  <div class="footer"> <img src="pics/copyright.gif" width="960" height="100" alt="footer" /></div>

<!-- end .container --></div>
</body>
</html>

just indent your code and it should be fine, I would love to help, but without seeing the code there's not much i can do. Maybe a link to the page on your site?

In your code:

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

The language attribute has been deprecated for about 15 years, the type attribute is no longer required, so:

<script>

> function validateForm () {
>     var x=document.forms["form1"]["name"].value;

It is handy to pass a reference to the form from the listener so the function can be more generic. Also, named form controls are added as named properties of the form. If you have a control with a name that is the same as a form property, it will overwrite the form property so you can't access it as a property. Much better to avoid standard property names for element names and IDs, so:

function validateForm(form) {
    var x = form.userName.value

then:

>     if (x == null || x == "") {

The value of a form control is a string, so x == null will never be true. It's sufficient (and more suitable) to just test:

    if (x == "") {

[...]

> function validateForm() {

If you declare multiple functions with the same name, each will overwrite the previous one so you are left with just the last one. You should have a single validation function that does the checks, though each check might be a separate function.

> var x=document.forms["form1"]["e-mail"].value;
> var atpos=x.indexOf("@");
> var dotpos=x.lastIndexOf(".");
> if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length)
>   {
>   alert("Please enter your e-mail address");
>   return false;
>   }
> }

You can use a regular expression to check the format of the e–mail address.

> <form id="form1" name="form1" method="post" action="post">

There generally isn't a need for ID and name attributes on a form, typically just an ID is used. For other form controls, a name is required for them to be successful, there is rarely a need for them to have an ID.

The validation function can be called from the form's submit event, so:

<form id="form1" onsubmit="validateForm(this);" ...>

[...]

>     <input type="text" name="name" id="name" />

Don't use XML markup in an HTML document. And don't use element names that are the same as form attribute names as they will make the related form property inaccessible.

  </p>
  <p>
    <label for="e-mail">E-mail:</label>
    <br />

Message:

If that is a submit button, then make it type submit. It doesn't need a name or ID if it's value isn't to be submitted:

    <input type="submit" value="Submit">

So your form and code can be:

function validateForm(form) {
    var reUserName = /\w+/; // User name has some letters
    var reEmail = /.+@..+\..+/;  // email has some characters, @, then a dot near the end
    var passed;

    if (!reUserName.test(form.userName.value)) {
        passed = false;
        // show message for user name
    }
    if (!reEmail.test(form.eMail.value)) {
        passed = false;
        // show message for email
    }
    return passed;
}

Note that the e–mail validation is just what you have, which is not particularly thorough.

Then the form:

<form onsubmit="return validateForm(this);">
    Name: <input name="userName"><br>
    E-mail: <input name="eMail"><br>
    <input type="submit">
</form>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM