views:

2038

answers:

1

My apologies if you have already seen this or replied to it but I can't seem to find the question I originally submitted and i'm desperate for a solution.

I need to display a promotional message when the user clicks submit if they meet certain criteria about their postcode. I have heard that you should use the submitHandler but being completely new to JavaScript and even newer to JQuery I am a little stuck on how I should write this. I thought it would be something like this but it obviously doesn't work.

submitHandler: function(form) { 
                    var special = /^[T]{1}[A]{1}([1-13|17|25]){2}/.test(value); 
                    if (special); 
                    alert('You have been entered into a competition to win a special    prize'); 
                    form.submit(); 
            }, // end of submitHandler

I basically need this message to display when they click submit and then they confirm and the form goes to the server.

This is the code I have so far for the validation:

 $(document).ready(function(){ 
 $("#orderForm").validate({ 
            onfocusout: function(element) { 
                    this.element(element); 
            }, 
            rules: { 
                    firstName: { 
                            required: true, 
                    }, 
                    surname: { 
                            required: true, 
                    }, 
                    phoneNumber: { 
                            required: true, 
                    }, 
                    streetName: { 
                            required: true, 
                    }, 
                    city: { 
                            required: true, 
                    }, 
                    postalCode: { 
                            required: true, 
                            shipPostalCode: true, 
                    }, 
                    billEmailAddress: { 
                            required: true, 
                    }, 
                    billPhoneNumber: { 
                            required: true, 
                    }, 
                    promoCardNumber: { 
                            required: true, 
                            fidelityCardNumber: true, 
                    }, 
                    billCardNumber: { 
                            required: true, 
                    }, 
                    billCardType: { 
                            required: true, 
                    }, 
            }, //end of rules 
    }); // end of validate 
    }); // end of function 


$.validator.addMethod('postalCode', function (value) { 
            return /^[A-Z]{2}\d{1,2}\s\d{1}[A-Z]{2}$/.test(value); 
            }, 'Please enter a valid postcode'); 
$.validator.addMethod('promoCardNumber', function (value) { 
            return /^[A-Z]{1}([A-Z]|\d){4}\s?([A-Z]|\d){5}\s?([A-Z]|\d){3}\d{1}$/.test  (value); 
            }, 'Please enter a valid card number');

This is my html code:

   <form id="orderForm" method="post" action="x"> 
  <table id="formTable" cellpadding="5"> 
    <tr> 
      <td> 
        <h3>Shipping and Billing Information</h3> 
      </td> 
      <td>&nbsp;</td> 
    </tr> 
    <tr> 
      <td><label for="firstname">First Name</label></td> 
      <td><input id="firstName" type="text" name="firstName" maxlength="30" /></td> 
    </tr> 
    <tr> 
      <td><label for="surname">Surname</label></td> 
      <td><input id="surname" type="text" name="surname" maxlength="30" /></td> 
    </tr> 
    <tr> 
      <td><label for="phoneNumber">Contact Telephone Number</label></td> 
      <td><input id="phoneNumber" type="text" name="phoneNumber" maxlength="30" /></td> 
    </tr> 
    <tr> 
      <td><label for="streetName">Street Name</label></td> 
      <td><input id="streetName" type="text" name="streetName" maxlength="30" /></td> 
    </tr> 
    <tr> 
      <td><label for="city">City</label></td> 
      <td><input id="city" type="text" name="city" maxlength="30" /></td> 
    </tr> 
    <tr> 
      <td><label for="postalCode">Post Code</label></td> 
      <td><input id="postalCode" type="text" name="postalCode" maxlength="30" /></td> 
    </tr> 
    <tr> 
      <td><label for="billEmailAddress">Email address</label></td> 
      <td><input id="billEmailAddress" type="text" name="billEmailAddress" maxlength="30" /></td> 
    </tr> 
    <tr> 
      <td><label for="billPhoneNumber">Contact Telephone Number</label></td> 
      <td><input id="billPhoneNumber" type="text" name="billPhoneNumber" maxlength="30" /></td> 
    </tr> 
    <tr> 
      <td><label for="promoCardNumber">Promotional Card</label></td> 
      <td><input id="promoCardNumber" type="text" name="promoCardNumber" maxlength="30" /></td> 
    </tr> 
    <tr> 
      <td><label for="billCardNumber">Credit Card Number</label></td> 
      <td><input id="billCardNumber" type="text" name="billCardNumber" maxlength="30" /></td> 
    </tr> 
    <tr> 
      <td><label for="billCardType">Credit Card Type</label></td> 
      <td><select id="billCardType" name="billCardType"> 
        <option value="..."> 
          Choose your card... 
        </option> 
        <option value="visa"> 
          Visa 
        </option> 
        <option value="mastercard"> 
          Mastercard 
        </option> 
      </select></td> 
    </tr> 
    <tr> 
      <td><label for="instructions">Instructions</label></td> 
      <td> 
      <textarea id="instructions" name="instructions" rows="8" cols="30"> 
Enter your requirements here or comments. </textarea></td> 
    </tr> 
    <tr> 
      <td colspan="2"><input id="submit" type="submit" name="Submit" value="Submit" /> 
              </td> 
    </tr> 
  </table> 
</form>
A: 

I think your original question (along with my attempt at an answer) is here: http://stackoverflow.com/questions/1136615/jquery-and-validate-plugin-how-to-add-a-promotional-message-on-submit

Rojo
Ah yes, you wrote,[code]$("#orderForm").validate({ submitHandler: function(form) { // code to display personal message // code to handle form submission }, onfocusout: function(element) { ...[/code]As you can see I have tried to write it but I really don't have a clue how I should code it. I have the elements of it just need to piece it together.
Where did you place the submitHandler method? It should be part of the object you pass to $("#orderForm").validate. Within your submitHandler method you'll probably want to call $(form).ajaxSubmit(); (if you're using the jQuery form plugin) rather than form.submit() since (I think) the Validation plugin cancels the default submit behavior, so calling form.submit() would only re-trigger the validation.
Rojo
I have put the submit handler under the other rules I have but before I close the rules. The error console doesn't like this though and says I have a syntax error. Should I put it after the rules?
It sounds like you have specified submitHandler as a property of the rules object. submitHandler should be a member of the options object instead (the object that you are passing to validate; this is also the same object that contains rules and onmouseout in your code).
Rojo
I have it outside of the rules but still within validate and it still doesn't work. They is no error in the console so it must be something to do with my logic instead. Everything works but when I click submit it goes to the server without display a message before hand when I put in a postcode that would meet the criteria. My submitHandler code is:submitHandler: function(form) {var special = /^[TA]{2}([1-11|20|22]){2}/.test(value);if (special){alert('You will receive a special gift');}form.submit();I don't think the code inside is right but I don't know what I should be putting
Without seeing more code, there's no way to know what's going wrong. Perhaps you should setup the relevant code on jsbin.com. If you do, I'll take another look.
Rojo