I hunted around for a good Javascript class to use for validation and finally clobbered together this from various sources on the net. This should be extremely useful for anyone doing client-side validation.
Validate = {
forMinLength: function(whatYouTyped, length_min) {
var fieldset = whatYouTyped.parentNode;
var txt = whatYouTyped.value;
if (txt.length >= length_min) {
fieldset.className = "valid";
} else {
fieldset.className = "invalid";
}
},
forMaxLength: function(whatYouTyped, length_max) {
var fieldset = whatYouTyped.parentNode;
var txt = whatYouTyped.value;
if (txt.length < = length_max) {
fieldset.className = "valid";
} else {
fieldset.className = "invalid";
}
},
forLength: function(whatYouTyped, length) {
var fieldset = whatYouTyped.parentNode;
var txt = whatYouTyped.value;
if (txt.length == length) {
fieldset.className = "valid";
} else {
fieldset.className = "invalid";
}
},
asEmail: function(whatYouTyped) {
var fieldset = whatYouTyped.parentNode;
var txt = whatYouTyped.value;
if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(txt)) {
fieldset.className = "valid";
} else {
fieldset.className = "invalid";
}
},
asNumber: function(whatYouTyped) {
var fieldset = whatYouTyped.parentNode;
var txt = whatYouTyped.value;
if (/^\d+$/.test(txt)) {
fieldset.className = "valid";
} else {
fieldset.className = "invalid";
}
},
asEqualTo: function(whatYouTyped, whatYouMatchWith) {
var fieldset = whatYouTyped.parentNode;
var txt = whatYouTyped.value;
var expect = whatYouMatchWith.value;
if (txt == expect && txt != "") {
fieldset.className = "valid";
} else {
fieldset.className = "invalid";
}
},
asNotEqualTovalue: function(whatYouTyped, whatYouMatchWith) {
var fieldset = whatYouTyped.parentNode;
var txt = whatYouTyped.value;
var expect = whatYouMatchWith;
if (txt != expect) {
fieldset.className = "valid";
} else {
fieldset.className = "invalid";
}
},
withRegex: function(whatYouTyped, regex) {
var fieldset = whatYouTyped.parentNode;
txt = whatYouTyped.value;
if (regex.test(txt)) {
fieldset.className = "valid";
} else {
fieldset.className = "invalid";
}
}
};
How do you use it? This is how:
HTML:
<form name="signup" id="signup">
<label for="alias">Alias <sup>*</sup></label>
<fieldset>
<input type="text" name="alias" id="alias" value="" />
</fieldset>
<br />
<label for="mobile_no">Mobile Number <sup>*</sup></label>
<fieldset>
<input type="text" name="mobile_no" id="mobile_no" />
</fieldset>
<br />
[..]
</form>
CSS (different images for fieldset.valid and fieldset.invalid):
fieldset.valid {
background:transparent url(/images/bg-fieldset-valid.gif) no-repeat 194px 0px;
}
fieldset.invalid {
background:transparent url(/images/bg-fieldset-invalid.gif) no-repeat 194px 0px;
}
And I hate onclick and onkeyup, so here’s some unobtrusive Javascript to tie it all in:
SignupValidation = {
initialize: function() {
Event.observe(document, "dom:loaded", this.setup_validation)
},
setup_validation: function() {
if($('signup_body')) {
Event.observe($('alias'), 'keyup', function() {
Validate.withRegex($('alias'), /^[A-Za-z]+[A-Za-z0-9]{4,}$/);
});
Event.observe($('mobile_no'), 'keyup', function() {
Validate.withRegex($('mobile_no'), /^9[0-9]{9,9}$/)
});
}
}
};
SignupValidation.initialize();
That’s it. The idea (for those who can’t bother to grok code) is that a fieldset changes its class from valid to invalid depending on the status of the field, this is then reflected in the styling.
AsktheCSSGuy was of much help.
Leave a Reply