Reputation: 673
Could someone show me how to resolve this validation issue please?
I'm trying to write a special validation script for an app we are working on. We don't want to use a jquery val plugin, for several reasons. It was pretty easy getting the layout of the code, and I have it working for text, text-area and drop-boxes, but I am stuck on the check of checkboxes and radio buttons. I have it coded to find the visiblefield-sets, then find the required [class name will have '-required' in it] check-boxes and radio fields within those visible field-sets.
Keeping the same structure of my code, how do I adjust what I have so it will then filter through the above that are not checked and provide the error message before form submission. Select "Boat" in the Product Type dropdown. to see required checks and radio fields.
I tried the not(':checked')
, but that is not working. I'm stuck. Help please.
my jsfiddle is here: http://jsfiddle.net/justmelat/X3CGW/
html and jquery below:
<form method="post" action="">
<div id="holdErrMsg"></div>
<fieldset id="mainSection" name="mainSection">
<legend style="color:blue; font-weight:bold">Project Overview Section</legend>
<table style="width: 100%">
<tr>
<td style="height: 33px; width: 178px;">Name<span style="color: red">*</span></td>
<td style="height: 33px"><input id="1125" name="1125" class="1125-required" type="text" />1125</td>
</tr>
<tr>
<td style="height: 33px; width: 178px;">Email<span style="color: red">*</span></td>
<td style="height: 33px"><input id="1026" name="1026" class="1026-required" type="text" />1026</td>
</tr>
<tr>
<td style="width: 178px">Product Title</td>
<td><input id="1089" name="1089" type="text" /></td>
</tr>
<tr>
<td style="width: 178px">Product Type<span style="color: red">*</span></td>
<td><select id="1169" name="1169" class="1169-required">
<option value="">Select</option>
<option value="Cars">Cars</option>
<option value="Boats">Boats</option>
<option value="Planes">Planes</option>
</select>1169</td>
</tr>
<tr><td>
<button id="btnCatchReqFlds" type="button" name="btn">Check Required Fields</button>
</td></tr>
</table>
</fieldset>
<fieldset id="section-11" name="section-11">
<legend style="color:fuchsia; font-weight:bold">Car Details Section</legend>
<table cellpadding="2" style="width: 100%">
<tr>
<td style="width: 334px; height: 35px"><label>Size:<span style="color: red">*</span></label></td>
<td style="height: 35px"><input id="1245" class="1245-required" name="1245" type="text" />1245</td>
</tr>
<tr>
<td style="height: 35px; width: 334px">Color:<span style="color: red">*</span></td>
<td style="height: 35px">
<select id="1433" class="1433-required" name="1433">
<option value="">Select</option>
<option value="Orange">Orange</option>
<option value="Blank">Blank</option>
<option value="Green">Green</option>
</select>1433</td>
</tr>
<tr>
<td style="width: 334px">Description:</td>
<td>
<textarea id="1290" name="1290" rows="2" style="width: 433px"></textarea></td>
</tr>
</table>
</fieldset>
<fieldset id="section-12" name="section-12">
<legend style="color:fuchsia; font-weight:bold">Plane Details Section</legend>
<table cellpadding="2" style="width: 100%">
<tr>
<td style="width: 334px; height: 35px"><label>Size:</label></td>
<td style="height: 35px"><input id="1245" name="1245" type="text" /></td>
</tr>
<tr>
<td style="height: 35px; width: 334px">Color<span style="color: red">*</span>:</td>
<td style="height: 35px">
<input type="checkbox" name="1433[]" id="1433[]" value="Orange" class="1433[]-required"/>Orange
<input type="checkbox" name="1433[]" id="1433[]" value="Blue" class="1433[]-required"/>Blue
<input type="checkbox" name="1433[]" id="1433[]" value="Green" class="1433[]-required"/>Green
>>1433[] </td>
</tr>
<tr>
<td style="width: 334px">Description:</td>
<td>
<textarea id="1290" name="1290" rows="2" style="width: 433px"></textarea></td>
</tr>
</table>
</fieldset>
<fieldset id="section-13" name="section-13">
<legend style="color:fuchsia; font-weight:bold">Boat Details Section</legend>
<table cellpadding="2" style="width: 100%">
<tr>
<td style="width: 334px; height: 35px"><label>Size:</label></td>
<td style="height: 35px"><input id="1245" name="1245" type="text" /></td>
</tr>
<tr>
<td style="height: 35px; width: 334px">Color:<span style="color: red">*</span></td>
<td style="height: 35px">
<input type="radio" name="1834" id="1834" value="None" class="valuetext 1834-required">None
<input type="radio" name="1834" id="1834" value="All" class="valuetex 1834-required">All
|1834[] </td>
</tr>
<tr>
<td style="height: 35px; width: 334px">Approver:</td>
<td style="height: 35px">
<input type="checkbox" name="1149[]" id="1149[]" value"John Marsh" class="1149[]-not_required"/>John Marsh
<input type="checkbox" name="1149[]" id="1149[]" value"Phil Collins" class="1149[]-not_required"/>Phil Collins
<input type="checkbox" name="1149[]" id="1149[]" value"Tom Green" class="1149[]-not_required"/>Tom Green
|1149[] </td>
</tr>
<tr>
<td style="height: 35px; width: 334px">Engine:<span style="color: red">*</span></td>
<td style="height: 35px">
<input type="radio" name="1898" id="1898" value="Type 1" class="valuetext 1898-required">Type 1
<input type="radio" name="1898" id="1898" value="Type 2" class="valuetext 1898-required">Type 2
|1898 </td>
</tr>
<tr>
<td style="width: 334px">Description:</td>
<td>
<textarea id="1290" name="1290" rows="2" style="width: 433px"></textarea></td>
</tr>
</table>
</fieldset><br>
<fieldset id="section-1011" name="section-1011">
<legend style="color:green; font-weight:bold">Misc Info Section</legend>
<table cellpadding="2" style="width: 100%">
<tr>
<td style="width: 334px; height: 35px"><label>Size:</label></td>
<td style="height: 35px"><input id="1301" name="1301" type="text" /></td>
</tr>
<tr>
<td style="height: 35px; width: 334px">Color:</td>
<td style="height: 35px">
<select id="1302" name="1302">
<option value="Orange">Orange</option>
<option value="Blank">Blank</option>
<option value="Green">Green</option>
</select></td>
</tr>
<tr>
<td style="width: 334px">Description:</td>
<td>
<textarea id="1303" name="1303" rows="2" style="width: 433px"></textarea></td>
</tr>
</table>
</fieldset>
</form>
$("#section-11,#section-12,#section-13,#section-1011").hide();
var projtype = new Array(
{value : 'Cars', sect_id : 'fieldset#section-11'},
{value : 'Planes', sect_id : 'fieldset#section-12'},
{value : 'Boats', sect_id : 'fieldset#section-13'}
);
$("select#1169").on('change',function () {
var thisVal = $(this).val();
var sect_id ="";
//$('fieldset[id!="mainSection"]').hide();
$(projtype).each(function() {
$(this.sect_id).hide();
if(this.value == thisVal) {
$(this.sect_id).show();
}
});
$("#btnCatchReqFlds").on('click', function() {
$("#holdErrMsg").empty();
var chk_requiredButEmpty = $("fieldset:visible").find('input:checkbox[class*="-required"]').filter(function() {
return not(':checked');
});
if (chk_requiredButEmpty.length) {
chk_requiredButEmpty.each(function () {
$("#holdErrMsg").append("Please fill in the " + this.name + "<br />");
});
}
return !chk_requiredButEmpty.length;
});
})
Upvotes: 0
Views: 295
Reputation: 18339
Update:
To make this much cleaner and easier to understand I think you should make the required class entirely separate. I'd also advocate for using valid class names and id's but that's your call so using your html as is I'd change this by removing the - next to the class.
<input type="checkbox" id="a1433[]" value="Orange" class="a1433[] required"/>Orange
<input type="checkbox" id="a1433[]" value="Blue" class="a1433[] required"/>Blue
<input type="checkbox" id="a1433[]" value="Green" class="a1433[] required"/>Green
Now the following will work fine:
var chk_requiredButEmpty = $("fieldset:visible input[type=checkbox].required").not(':checked');
Original:
I think you need to change the line to:
var chk_requiredButEmpty = $("fieldset:visible").find('input:checkbox[class*="-required"]').filter(function() {
return $(this).not(':checked');
});
Also, the id's for your input's should start with a letter. They are invalid as they are now although they may still work.
Upvotes: 1