Hi,
I have a form that has text fields as well as drop down fields, I have got validations for the text fields onblur and on submit that display all errors that the user has made in one alert. It uses regulator expressions. I know how to check for an error in dropdown but don't know how to have the error without creating another alert. I only want one alert for all errors.
Here is my code html:
<select id="fldMainDriverTitle" name="fldMainDriverTitle" >
<option value="none"></option>
<option value="Mr.">Mr</option>
<option value="Mrs">Mrs</option>
<option value="Miss">Miss</option>
<option value="Ms">Ms</option>
<option value="Dr">Dr</option>
<option value="Prof">Prof</option>
<option value="Rev">Rev</option>
<option value="Sir">Sir</option>
<option value="Lady">Lady</option>
<option value="Lord">Lord</option>
</select>
<span class="price">*</span>
<span id="error_fldMainDriverTitle" class="errormessage"></span></p>
<p><label for="fldMainDriverFirstName">Driver name</label>
<input name="fldMainDriverFirstName" type="text" id="fldMainDriverFirstName" value="(MAINDRIVER_FIRSTNAME)" size="15"> <span class="price">*</span>
<span id="error_fldMainDriverFirstName" class="errormessage"></span></p>
<p><label for="fldMainDriverLastName">Driver surname</label>
<input name="fldMainDriverLastName" type="text" id="fldMainDriverLastName" value="(MAINDRIVER_LASTNAME)" size="25"> <span class="price">*</span>
<span id="error_fldMainDriverLastName" class="errormessage"></span></p>
<p> <input name="Submit" value="Send" type="submit" ></p>
JS code first part:
var fV = {
addEvent: function(elm, evType, fn, useCapture) {
// cross-browser event handling for IE5+, NS6 and Mozilla
// By Scott Andrew
if (elm.addEventListener) {
elm.addEventListener(evType, fn, useCapture);
return true;
} else if (elm.attachEvent) {
var r = elm.attachEvent('on' + evType, fn);
return r;
} else {
elm['on' + evType] = fn;
}
},
init: function() {
for (var i in validationSet) {
if (document.getElementsByName(i)) {
var formField = document.getElementsByName(i)[0];
fV.addEvent(formField, 'blur', fV.checkValid, false);
if (!formField.form.validateSubmit) {
fV.addEvent(formField.form, 'submit', fV.checkValidSubmit, false);
formField.form.onsubmit = fV.checkSubmit; // Safari
formField.form.validateSubmit = true;
}
}
}
},
checkValidSubmit: function(e) {
var frm = window.event ? window.event.srcElement : e ? e.target : null;
if (!frm) return;
var errText = [];
for (var i = 0; i < frm.elements.length; i++) {
if (frm.elements.name && validationSet[frm.elements.name]) {
var failedE = fV.handleValidity(frm.elements);
var errDisplay = document.getElementById('error_' + frm.elements.name);
if (failedE && errDisplay) {
errDisplay.innerHTML =
validationSet[failedE.name]['error'];
}
if (!failedE && errDisplay) {
errDisplay.innerHTML = '';
}
if (failedE) {
var labels = document.getElementsByTagName('label');
errText[errText.length] = validationSet[failedE.name]['error'];
for (var j = 0; j < labels.length; j++) {
if (labels[j].htmlFor == failedE.id) {
errText[errText.length - 1] +=
' (field \'' + labels[j].firstChild.nodeValue + '\')';
}
}
}
} /* end 'if' */
} /* end 'for' */
if (errText.length > 0) {
alert('__________________________________________________________\n' +
'Please fix the following errors and resubmit:\n\n' +
errText.join('\n') + '\n__________________________________________________________\n' +
"Please re-enter and submit again");
frm.submitAllowed = false;
if (e && e.stopPropagation && e.preventDefault) {
e.stopPropagation();
e.preventDefault();
}
if (window.event) {
window.event.cancelBubble = true;
window.event.returnValue = false;
return false;
}
} else {
frm.submitAllowed = true;
}
},
checkSubmit: function() {
if (this.attachEvent) return true;
return this.submitAllowed;
},
checkValid: function(e) {
var target = window.event ? window.event.srcElement : e ? e.target : null;
if (!target) return;
var failedE = fV.handleValidity(target);
var errDisplay = document.getElementById('error_' + target.name);
if (failedE && errDisplay) {
errDisplay.innerHTML = validationSet[failedE.name]['error'];
failedE.focus();
}
if (failedE && !errDisplay) {
alert(validationSet[failedE.name]['error']);
}
if (!failedE && errDisplay) {
errDisplay.innerHTML = '';
}
},
handleValidity: function(field) {
if (!field.value) {
}
var re = validationSet[field.name]['regexp'];
if (!field.value.match(re)) {
return field;
} else {
return null;
}
}
}
fV.addEvent(window, 'load', fV.init, false);
JS code second part:
var validationSet = {
'phone': {
'regexp': /^\(\d\d\d\)\s\d\d\d-\d\d\d\d+$/,
'error': '- The phone number is invalid or empty. \n' +
" It should be in the form (123) 456-7890."
},
'fldMainDriverFirstName': {
'regexp': /^[a-zA-Z]+$/,
'error': '- Please enter the name of the main driver.'
},
'fldMainDriverLastName': {
'regexp': /^[a-zA-Z]+$/,
'error': '- Please enter the surname of the main driver.'
}
}
Thanks
I have a form that has text fields as well as drop down fields, I have got validations for the text fields onblur and on submit that display all errors that the user has made in one alert. It uses regulator expressions. I know how to check for an error in dropdown but don't know how to have the error without creating another alert. I only want one alert for all errors.
Here is my code html:
<select id="fldMainDriverTitle" name="fldMainDriverTitle" >
<option value="none"></option>
<option value="Mr.">Mr</option>
<option value="Mrs">Mrs</option>
<option value="Miss">Miss</option>
<option value="Ms">Ms</option>
<option value="Dr">Dr</option>
<option value="Prof">Prof</option>
<option value="Rev">Rev</option>
<option value="Sir">Sir</option>
<option value="Lady">Lady</option>
<option value="Lord">Lord</option>
</select>
<span class="price">*</span>
<span id="error_fldMainDriverTitle" class="errormessage"></span></p>
<p><label for="fldMainDriverFirstName">Driver name</label>
<input name="fldMainDriverFirstName" type="text" id="fldMainDriverFirstName" value="(MAINDRIVER_FIRSTNAME)" size="15"> <span class="price">*</span>
<span id="error_fldMainDriverFirstName" class="errormessage"></span></p>
<p><label for="fldMainDriverLastName">Driver surname</label>
<input name="fldMainDriverLastName" type="text" id="fldMainDriverLastName" value="(MAINDRIVER_LASTNAME)" size="25"> <span class="price">*</span>
<span id="error_fldMainDriverLastName" class="errormessage"></span></p>
<p> <input name="Submit" value="Send" type="submit" ></p>
JS code first part:
var fV = {
addEvent: function(elm, evType, fn, useCapture) {
// cross-browser event handling for IE5+, NS6 and Mozilla
// By Scott Andrew
if (elm.addEventListener) {
elm.addEventListener(evType, fn, useCapture);
return true;
} else if (elm.attachEvent) {
var r = elm.attachEvent('on' + evType, fn);
return r;
} else {
elm['on' + evType] = fn;
}
},
init: function() {
for (var i in validationSet) {
if (document.getElementsByName(i)) {
var formField = document.getElementsByName(i)[0];
fV.addEvent(formField, 'blur', fV.checkValid, false);
if (!formField.form.validateSubmit) {
fV.addEvent(formField.form, 'submit', fV.checkValidSubmit, false);
formField.form.onsubmit = fV.checkSubmit; // Safari
formField.form.validateSubmit = true;
}
}
}
},
checkValidSubmit: function(e) {
var frm = window.event ? window.event.srcElement : e ? e.target : null;
if (!frm) return;
var errText = [];
for (var i = 0; i < frm.elements.length; i++) {
if (frm.elements.name && validationSet[frm.elements.name]) {
var failedE = fV.handleValidity(frm.elements);
var errDisplay = document.getElementById('error_' + frm.elements.name);
if (failedE && errDisplay) {
errDisplay.innerHTML =
validationSet[failedE.name]['error'];
}
if (!failedE && errDisplay) {
errDisplay.innerHTML = '';
}
if (failedE) {
var labels = document.getElementsByTagName('label');
errText[errText.length] = validationSet[failedE.name]['error'];
for (var j = 0; j < labels.length; j++) {
if (labels[j].htmlFor == failedE.id) {
errText[errText.length - 1] +=
' (field \'' + labels[j].firstChild.nodeValue + '\')';
}
}
}
} /* end 'if' */
} /* end 'for' */
if (errText.length > 0) {
alert('__________________________________________________________\n' +
'Please fix the following errors and resubmit:\n\n' +
errText.join('\n') + '\n__________________________________________________________\n' +
"Please re-enter and submit again");
frm.submitAllowed = false;
if (e && e.stopPropagation && e.preventDefault) {
e.stopPropagation();
e.preventDefault();
}
if (window.event) {
window.event.cancelBubble = true;
window.event.returnValue = false;
return false;
}
} else {
frm.submitAllowed = true;
}
},
checkSubmit: function() {
if (this.attachEvent) return true;
return this.submitAllowed;
},
checkValid: function(e) {
var target = window.event ? window.event.srcElement : e ? e.target : null;
if (!target) return;
var failedE = fV.handleValidity(target);
var errDisplay = document.getElementById('error_' + target.name);
if (failedE && errDisplay) {
errDisplay.innerHTML = validationSet[failedE.name]['error'];
failedE.focus();
}
if (failedE && !errDisplay) {
alert(validationSet[failedE.name]['error']);
}
if (!failedE && errDisplay) {
errDisplay.innerHTML = '';
}
},
handleValidity: function(field) {
if (!field.value) {
}
var re = validationSet[field.name]['regexp'];
if (!field.value.match(re)) {
return field;
} else {
return null;
}
}
}
fV.addEvent(window, 'load', fV.init, false);
JS code second part:
var validationSet = {
'phone': {
'regexp': /^\(\d\d\d\)\s\d\d\d-\d\d\d\d+$/,
'error': '- The phone number is invalid or empty. \n' +
" It should be in the form (123) 456-7890."
},
'fldMainDriverFirstName': {
'regexp': /^[a-zA-Z]+$/,
'error': '- Please enter the name of the main driver.'
},
'fldMainDriverLastName': {
'regexp': /^[a-zA-Z]+$/,
'error': '- Please enter the surname of the main driver.'
}
}
Thanks