Reputation: 190
I'm using JQuery Validate, and it's doing the weirdest thing in Safari. If I don't select anything, it gives me the correct error message. But as soon as I fulfill the form requirements and hit submit, it just refreshes the page rather than submitting the form. The console message is "nothing selected, can't validate, returning nothing".
This is my validation script:
$(document).ready(function() { /* ------------ FORM #STORY1 ------------ */ $('#class').focus(function(){ $('#alum').attr('checked',true); }); $('#college').focus(function(){ $('#transfer').attr('checked',true); }); /* The validation script */ $("#story1").submit(function(){ return false; }); // Turn our validator into a function var story1Validate = function(form){ $(form).find('div#err_msg').hide(); $(form).find('#submitBtn').removeAttr('disabled'); $(form).validate({ debug:false, submitHandler: function(form) { $('#submitBtn').attr('disabled','disabled'); $('#submitBtn').hide(); $('#process').show(); $('#recaptcha_widget_div').hide(); form.submit(); }, errorContainer: $(form).find('div#err_msg'), errorPlacement: function(error, element) { $(form).find('div#err_msg').show(); error.appendTo(form+' div#err_msg'); }, rules: { type: "required", class: { required: "#alum:checked" }, college: { required: "#transfer:checked" } },//rules messages: { type: "Please make a selection.", class: { required:"You indicated that you're an alum. Please enter the year you graduated." }, college: { required:"You indicated that you're a transfer student. Please enter the name of the school to which you transferred." } }//messages });//form validate }//customValidation function // Attach our custom form function to the form story1Validate("#story1"); });
And this is the accompanying form's HTML:
<form id="story1" name="story1" method="post" action="your-story/index.php" class="form-intro">
<h3>I am a...</h3>
<p>
<input name="type" type="radio" class="input-radio" id="alum" value="alum" /> <label for="alum">Alum, class of</label><br />
<input name="class" type="text" class="input-txt" id="class" value="" />
</p>
<p>
<input name="type" type="radio" class="input-radio" id="transfer" value="transfer" /> <label for="transfer">Transfer student to</label><br />
<input name="college" type="text" class="input-txt" id="college" value="" />
</p>
<p>
<input name="type" type="radio" class="input-radio" id="student" value="student" /> <label for="student">Current student</label>
</p>
<p>
<input name="type" type="radio" class="input-radio" id="staff" value="staff" /> <label for="staff">Professor or staff member</label>
</p>
<p>
<input name="type" type="radio" class="input-radio" id="" value="other" /> <label for="other">None of the above</label>
</p>
<div id="err_msg">
</div>
<footer class="form-nav">
<input name="submitBtn" type="submit" class="input-btn" id="submitBtn" value="Next >" />
</footer>
</form>
I've only seen it do this on Safari (both Mac and PC) and occasionally when I submit the form then hit the back button in Firefox. Seems to work fine in IE, too.
Any ideas?? This is driving me bonkers!
Upvotes: 2
Views: 2680
Reputation: 190
Ok, I had a friend look at it in his Safari, and HIS console threw an error in the JS (even though mine did not). Apparently I shouldn't have named any of the input fields "class." I should have known better. Anyway, changing it from name="class" to name="classOf" in all instance got rid of that.
Then I explored some more and discovered that it didn't like disabling the submit button before form.submit(). So I changed the submit handler to just:
submitHandler: function(form) {
form.submit();
}
Now I just need to figure out why my console didn't throw that first error. ;_;
Upvotes: 1