Reputation: 133
I want to disabled and enable a submit-input type depending on the completeness user's input with jquery. I am able to shut it down but cant not turn it on :(
$('#submit_btn').attr('disabled', 'disabled');
var nameFlag = false;;
var emailFlag = false;
var pwdFlag = false;
$('#f-name').focusout(function() {
if($(this).val() == '') {
nameFlag = false;
} else if($(this).val().length < 4) {
nameFlag = false;
} else {
nameFlag = true;
//alert(nameFlag);
}
});
$('#f-email').focusout(function() {
if($(this).val() == '') {
emailFlag = false;
} else if($(this).val().length < 4) {
emailFlag = false;
} else {
emailFlag = true;
//alert(emailFlag);
}
});
$('#f-pwd').focusout(function() {
if($(this).val() == '') {
pwdFlag = false;
} else if($(this).val().length < 6) {
pwdFlag = false;
} else {
pwdFlag = true;
//alert(pwdFlag);
}
});
//alert(nameFlag + " " + emailFlag + " " + pwdFlag);
if(nameFlag && emailFlag && pwdFlag) {
$('#submit_btn').removeAttr('disabled');
} else {
$('#submit_btn').attr('disabled', 'disabled');
}
So I put some alert boxes and see that my flags change depending on the user input but it doesn't enable my submit button
Upvotes: 0
Views: 1294
Reputation: 230
something wrong with your variables. try this code its working fine.
$(document).ready(function () {
$('#submit_btn').attr('disabled', 'disabled');
var nameFlag = false;;
var emailFlag = false;
var pwdFlag = false;
$('#f-name').focusout(function () {
if ($(this).val() == '') {
DisabledButton();
} else if ($(this).val().length < 4) {
DisabledButton();
} else {
EnabledButton();
//alert(nameFlag);
}
});
$('#f-email').focusout(function () {
if ($(this).val() == '') {
DisabledButton();
} else if ($(this).val().length < 4) {
DisabledButton();
} else {
EnabledButton();
//alert(emailFlag);
}
});
$('#f-pwd').focusout(function () {
if ($(this).val() == '') {
DisabledButton();
} else if ($(this).val().length < 6) {
DisabledButton();
} else {
EnabledButton();
}
});
function EnabledButton() {
$('#submit_btn').removeAttr('disabled');
}
function DisabledButton() {
$('#submit_btn').attr('disabled', 'disabled')
}
});
see jsfiddle link http://jsfiddle.net/2jDKm/4/
Upvotes: 0
Reputation: 230
I also tried to do same using jquery attr. its working fine. are you doing code inside document ready?
$(document).ready(function () {
$('#submit_btn').attr('disabled', 'disabled');
var nameFlag = false;
var emailFlag = false;
var pwdFlag = false;
$("#fName").focusout(function () {
if ($(this).val() == '') {
DisabledButton();
} else if ($(this).val().length < 4) {
DisabledButton();
} else {
EnabledButton();
}
});
$('#f-email').focusout(function () {
if ($(this).val() == '') {
DisabledButton()
} else if ($(this).val().length < 4) {
DisabledButton();
} else {
EnabledButton();
}
});
function EnabledButton() {
$('#submit_btn').removeAttr('disabled');
}
function DisabledButton() {
$('#submit_btn').attr('disabled', 'disabled')
}
});
see fiddle link http://jsfiddle.net/2jDKm/2/
Upvotes: 2
Reputation: 1167
use this:
http://jsfiddle.net/jq7Q7/1/
i moved yourr check code to a new function and check it every time you focus out a control:
$('#submit_btn').attr('disabled', 'disabled');
var nameFlag = false;;
var emailFlag = false;
var pwdFlag = false;
$('#f-name').focusout(function() {
if($(this).val() == '') {
nameFlag = false;
} else if($(this).val().length < 4) {
nameFlag = false;
} else {
nameFlag = true;
//alert(nameFlag);
}
checkform();
});
$('#f-email').focusout(function() {
if($(this).val() == '') {
emailFlag = false;
} else if($(this).val().length < 4) {
emailFlag = false;
} else {
emailFlag = true;
//alert(emailFlag);
}
checkform();
});
$('#f-pwd').focusout(function() {
if($(this).val() == '') {
pwdFlag = false;
} else if($(this).val().length < 6) {
pwdFlag = false;
} else {
pwdFlag = true;
//alert(pwdFlag);
}
checkform();
});
function checkform(){
//alert(nameFlag + " " + emailFlag + " " + pwdFlag);
if(nameFlag && emailFlag && pwdFlag) {
$('#submit_btn').removeAttr('disabled');
} else {
$('#submit_btn').attr('disabled', 'disabled');
}
}
Upvotes: 1
Reputation: 133
This is my html:
<form class="form_box prefix_clear" method="get" action="#login">
<div class="f-field">
<label for="f-name">Username:</label><br/>
<input id="f-name" class="submit_text" type="text" name="username"/>
<p class="f-error case1">Please enter your username</p>
<p class="f-error case2">Your username has to be at least 4 characters</p>
</div>
<div class="f-field">
<label for="f-email">Email:</label><br/>
<input id="f-email" class="submit_text" type="text" name="email"/>
<p class="f-error case1">Please enter your email</p>
<p class="f-error case2">Your email is not a valid format</p>
</div>
<div class="f-field">
<label for="f-pwd">Password:</label><br/>
<input id="f-pwd" class="submit_text" type="password" name="password"/>
<p class="f-error case1">Please enter your password</p>
<p class="f-error case2">Your password has to be at least 6 letters (A-Z, a-z, 0-9)</p>
</div>
<div class="prefix_clear">
<input id="submit_btn" class="f-btn" type="submit" name="submit" value="Create Account"/>
</div>
</form>
Upvotes: 0
Reputation: 1167
you can use prop() method insted of attr()
$('#submit_btn').prop('disabled', true);
and
$('#submit_btn').prop('disabled', false);
can help you through this problem
Upvotes: 0