Enabling disabled button after successful jQuery validation
jquery, jquery-validate, twitter-bootstrap-3
Solution
There is no jQuery Validate plugin callback option/function that fires when all fields are valid without first clicking the submit button.
You'll need to create an external `keyup blur` event handler that checks your form for validity and enables/disables the button accordingly; every time a key is pressed or you leave a field.
DEMO: http://jsfiddle.net/p628Y/1/
$(document).ready(function () {
$('#ccSelectForm').validate({
rules: {
inputEmail: {
required: true,
email: true
},
inputEmailConfirm: {
// required: true, // <-- redundant
// email: true, // <-- redundant
equalTo: '#inputEmail'
} // <-- removed trailing comma
}
});
$('#ccSelectForm input').on('keyup blur', function () { // fires on every keyup & blur
if ($('#ccSelectForm').valid()) { // checks form for validity
$('button.btn').prop('disabled', false); // enables button
} else {
$('button.btn').prop('disabled', 'disabled'); // disables button
}
});
});
Since the jQuery Validate plugin disables the browser's HTML5 validation dynamically, I removed the `required` attribute from your markup and changed `type="email"` into `type="text"`. (You already have these validation rules specified in the plugin.)
<input type="text" name="inputEmail" placeholder="jane.smith@email.com" id="inputEmail" />
<input type="text" name="inputEmailConfirm" placeholder="jane.smith@email.com" id="inputEmailConfirm" />
You also don't need to specify all the rules twice when using the `equalTo` rule as the second field must already always match the first.
EDIT:
In the above scenario, your page is totally dependent upon JavaScript. In other words, without JavaScript, the button is always disabled.
If you have server-side validation in place and want your page to be independent of JavaScript, you'll need to remove the `disabled="disabled"` from your button markup and add it to your JavaScript just inside the DOM ready event handler.
$('button.btn').prop('disabled', 'disabled');
In this scenario, without JavaScript, you'll still have a working button, and with JavaScript, the button is disabled programatically on page load.
Problem
I have the following code where I have 2 email input fields which I need to validate they are the same which is working successfully using jQuery validate equalTo. ``` <div class="control-group"> <label class="control-label" for="inputEmail"><strong>Email Address</strong></label> <div class="controls"> <input type="email" name="inputEmail" placeholder="jane.smith@email.com" id="inputEmail" required> </div> <label class="control-label" for="inputEmailConfirm"><strong>Confirm Email Address</strong></label> <div class="controls"> <input type="email" name="inputEmailConfirm" placeholder="jane.smith@email.com" id="inputEmailConfirm" required> </div> </div> <button type="submit" id="emailSubmit" disabled="disabled" class="btn btn-danger" data-toggle="tooltip" data-placement="bottom" title="Click me to buy">Credit Card Checkout » </button> ``` Upon successful validation I wish to enable the button, but can't seem to figure out how to do this. ``` $('#ccSelectForm').validate({ rules: { inputEmail: { required: true, email: true }, inputEmailConfirm: { required: true, email: true, equalTo: '#inputEmail' }, } }); ``` Ideally as bonus I'd like to set the form controls to utilise the validation states in Bootstrap3, detailed here - http://getbootstrap.com/css/#forms-control-validation Fiddle is here http://jsfiddle.net/4wU5m/