form validation with jquery but not on hidden elements

form validation with jquery but not on hidden elements

I have two tables: the first is shown and the second is hidden.

If the last two items (in color) in the first table have either "Yes" choices selected, then the second table appears.

I'm having trouble getting the form to submit when the second table is hidden. If the second table is hidden, I don't care whether the radio buttons are selected or not.

I've been messing around with the jQuery Validation Plugin at jquery.bassistance.de/validate/demo/milk , but I can't seem to get it to work.

My page is below.



  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  2. "http://www.w3.org/TR/html4/loose.dtd">
  3. <html>
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  6. <title>Survey</title>

  7. <style type="text/css">

  8. /* Signup form */

  9. #signupform table {
  10.   border-spacing: 0px;
  11.   border-collapse: collapse;
  12.   empty-cells: show;
  13. }

  14. #signupform .label {
  15.   padding-top: 2px;
  16.   padding-right: 8px;
  17.   vertical-align: top;
  18.   text-align: right;
  19.   width: 125px;
  20.   white-space: nowrap;
  21. }

  22. #signupform .field {
  23.   padding-bottom: 10px;
  24.   white-space: nowrap;
  25. }

  26. #signupform .status {
  27.   padding-top: 2px;
  28.   padding-left: 8px;
  29.   vertical-align: top;
  30.   width: 246px;
  31.   white-space: nowrap;
  32. }

  33. #signupform .textfield {
  34.   width: 150px;
  35. }

  36. #signupform label.error {
  37.   background:url("http://jquery.bassistance.de/validate/demo/images/unchecked.gif") no-repeat 0px 0px;

  38.   padding-left: 16px;

  39.   padding-bottom: 2px;

  40.   font-weight: bold;

  41.   color: #EA5200;
  42. }

  43. #signupform label.checked {
  44.   background:url("http://jquery.bassistance.de/validate/demo/images/checked.gif") no-repeat 0px 0px;
  45. }

  46. #signupform .success_msg {
  47.   font-weight: bold;
  48.   color: #0060BF;
  49.   margin-left: 19px;
  50. }

  51. #signupform #dateformatStatus, #signupform #termsStatus {
  52.   margin-left: 6px;
  53. }

  54. #signupform #dateformat_eu {
  55.  vertical-align: middle;
  56. }

  57. #signupform #ldateformat_eu {
  58.   font-weight: normal;
  59.   vertical-align: middle;
  60. }

  61. #signupform #dateformat_am {
  62.   vertical-align: middle;
  63. }

  64. #signupform #ldateformat_am {
  65.   font-weight: normal;
  66.   vertical-align: middle;
  67. }

  68. #signupform #termswrap {
  69.   float: left;
  70. }

  71. #signupform #terms {
  72.   vertical-align: middle;
  73.   float: left;
  74.   display: block;
  75.   margin-right: 5px;
  76. }

  77. #signupform #lterms {
  78.   font-weight: normal;
  79.   vertical-align: middle;
  80.   float: left;
  81.   display: block;
  82.   width: 350px;
  83.   white-space: normal;
  84. }

  85. #signupform #lsignupsubmit {
  86.   visibility: hidden;
  87. }


  88. .jscom, .mix htcom   { color: #4040c2; }
  89. .com      { color: green; }
  90. .regexp   { color: maroon; }
  91. .string   { color: teal; }
  92. .keywords { color: blue; }
  93. .global   { color: #008; }
  94. .numbers  { color: #880; }
  95. .comm     { color: green; }
  96. .tag      { color: blue; }
  97. .entity   { color: blue; }
  98. .string   { color: teal; }
  99. .aname    { color: maroon; }
  100. .avalue   { color: maroon; }
  101. .jquery   { color: #00a; }
  102. .plugin   { color: red; }


  103. </style>






  104. <script src="http://jquery.bassistance.de/validate/lib/jquery.js" type="text/javascript"></script>
  105. <script src="http://jquery.bassistance.de/validate/jquery.validate.js" type="text/javascript"></script>
  106. <script type="text/javascript">
  107. $.metadata.setType("attr", "validate");
  108. $(document).ready(function() {
  109. $("#form1").validate();
  110. $("#selecttest").validate();
  111. });
  112. </script>
  113. <style type="text/css">
  114. .block { display: block; }
  115. form.cmxform label.error { display: none; }
  116. </style>



  117. <script type="text/javascript">
  118. $(document).ready(function(){
  119. $(function() {
  120.   $("[name=toggler]").click(function() {
  121.     $('.toHide').hide();
  122.     $("#blk-" + $(this).val()).toggle();
  123.   });
  124. });

  125. });
  126. $( function()
  127. {
  128. var $radios = $( 'input:radio[name=texting_dur_school], input:radio[name=texting_out_school]' ), $toggledTable = $( '#part2_question' );
  129. $radios
  130. .click( function()
  131. {
  132. if( $radios.filter( ':checked[value="Yes"]' ).length )
  133. {
  134. $toggledTable.show();
  135. }
  136. else
  137. {
  138. $toggledTable.hide();
  139. }
  140. } );
  141. // validate signup form on keyup and submit
  142. var validator = $("#signupform").validate({
  143. rules: {
  144. homeroom: "required",
  145. cafeteria: "required",
  146. academic_class: "required",
  147. before_school: "required",
  148. bus: "required",
  149. after_school: "required",
  150. gym: "required",
  151. dances: "required",
  152. hallway: "required",
  153. sporting_events: "required",
  154. bathroom: "required",
  155. telephone: "required",
  156. texting_dur_school: "required",
  157. texting_out_school: "required",
  158. Facebook: "required",
  159. Twitter: "required",
  160. IMing: "required",
  161. Email: "required",
  162. Myspace: "required",
  163. Texting: "required",
  164. Online_Gaming: "required"
  165. },
  166. messages: {
  167. homeroom: "&nbsp;",
  168. cafeteria: "&nbsp;",
  169. academic_class: "&nbsp;",
  170. before_school: "&nbsp;",
  171. bus: "&nbsp;",
  172. after_school: "&nbsp;",
  173. gym: "&nbsp;",
  174. dances: "&nbsp;",
  175. hallway: "&nbsp;",
  176. sporting_events: "&nbsp;",
  177. bathroom: "&nbsp;",
  178. telephone: "&nbsp;",
  179. texting_dur_school: "&nbsp;",
  180. texting_out_school: "&nbsp;",
  181. Facebook: "&nbsp;",
  182. Twitter: "&nbsp;",
  183. IMing: "&nbsp;",
  184. Email: "&nbsp;",
  185. Myspace: "&nbsp;",
  186. Texting: "&nbsp;",
  187. Online_Gaming: "&nbsp;"
  188. },
  189. // the errorPlacement has to take the table layout into account
  190. errorPlacement: function(error, element) {
  191. if ( element.is(":radio") )
  192. error.appendTo( element.parent().next().next() );
  193. else if ( element.is(":checkbox") )
  194. error.appendTo ( element.next() );
  195. else
  196. error.appendTo( element.parent().next() );
  197. },
  198. // specifying a submitHandler prevents the default submit, good for the demo
  199. submitHandler: function() {
  200. alert("submitted!");
  201. },
  202. // set this class to error-labels to indicate valid fields
  203. success: function(label) {
  204. // set &nbsp; as text for IE
  205. label.html("&nbsp;").addClass("checked");
  206. }
  207. });

  208. } );
  209. </script>
  210. </head>
  211. <body>



  212. <form id="signupform" autocomplete="off" method="get" action="">

  213. <!-- This table visible on page load -->
  214. <table width="100%" border="1" cellpadding="0" cellspacing="0">
  215. <tr>
  216.   <td>
  217. <table width="100%">
  218.  <tr>
  219. <td><span><strong>2a. Where has it happened?</strong></span></td>
  220. <td><strong>Yes</strong></td>
  221. <td><strong>No</strong></td>
  222. <td></td>
  223.  </tr>
  224.  <tr>
  225. <td bgcolor="#ddeeee">homeroom </td>
  226. <td bgcolor="#ddeeee"><input type="radio" name="homeroom" value="Yes" /></td>
  227. <td bgcolor="#ddeeee"><input type="radio" name="homeroom" value="No" /></td>
  228. <td bgcolor="#ddeeee"></td>
  229.  </tr>
  230.  <tr>
  231. <td>cafeteria</td>
  232. <td><input type="radio" name="cafeteria" value="Yes" /></td>
  233. <td><input type="radio" name="cafeteria" value="No" /></td>
  234. <td></td>
  235.  </tr>
  236.  <tr>
  237. <td bgcolor="#ddeeee">academic class</td>
  238. <td bgcolor="#ddeeee"><input type="radio" name="academic_class" value="Yes" /></td>
  239. <td bgcolor="#ddeeee"><input type="radio" name="academic_class" value="No" /></td>
  240. <td bgcolor="#ddeeee"></td>
  241.  </tr>
  242.  <tr>
  243. <td>before school</td>
  244. <td><input type="radio" name="before_school" value="Yes" /></td>
  245. <td><input type="radio" name="before_school" value="No" /></td>
  246. <td></td>
  247.  </tr>
  248.  <tr>
  249. <td bgcolor="#ddeeee">bus</td>
  250. <td bgcolor="#ddeeee"><input type="radio" name="bus" value="Yes" /></td>
  251. <td bgcolor="#ddeeee"><input type="radio" name="bus" value="No" /></td>
  252. <td bgcolor="#ddeeee"></td>
  253.  </tr>
  254.  <tr>
  255. <td>after school</td>
  256. <td><input type="radio" name="after_school" value="Yes" /></td>
  257. <td><input type="radio" name="after_school" value="No" /></td>
  258. <td></td>
  259.  </tr>
  260.  <tr>
  261. <td bgcolor="#ddeeee">gym</td>
  262. <td bgcolor="#ddeeee"><input type="radio" name="gym" value="Yes" /></td>
  263. <td bgcolor="#ddeeee"><input type="radio" name="gym" value="No" /></td>
  264. <td bgcolor="#ddeeee"></td>
  265.  </tr>
  266.  <tr>
  267. <td>dances</td>
  268. <td><input type="radio" name="dances" value="Yes" /></td>
  269. <td><input type="radio" name="dances" value="No" /></td>
  270. <td></td>
  271.  </tr>
  272.  <tr>
  273. <td bgcolor="#ddeeee">hallway</td>
  274. <td bgcolor="#ddeeee"><input type="radio" name="hallway" value="Yes" /></td>
  275. <td bgcolor="#ddeeee"><input type="radio" name="hallway" value="No" /></td>
  276. <td bgcolor="#ddeeee"></td>
  277.  </tr>
  278.  <tr>
  279. <td>sporting events</td>
  280. <td><input type="radio" name="sporting_events" value="Yes" /></td>
  281. <td><input type="radio" name="sporting_events" value="No" /></td>
  282. <td></td>
  283.  </tr>
  284.  <tr>
  285. <td bgcolor="#ddeeee">bathroom</td>
  286. <td bgcolor="#ddeeee"><input type="radio" name="bathroom" value="Yes" /></td>
  287. <td bgcolor="#ddeeee"><input type="radio" name="bathroom" value="No" /></td>
  288. <td bgcolor="#ddeeee"></td>
  289.  </tr>
  290.  <tr>
  291. <td>telephone</td>
  292. <td><input type="radio" name="telephone" value="Yes" /></td>
  293. <td><input type="radio" name="telephone" value="No" /></td>
  294. <td></td>
  295.  </tr>
  296.  <tr>
  297. <td bgcolor="#FFE5E7">online/texting during school</td>
  298. <td bgcolor="#FFE5E7"><input type="radio" name="texting_dur_school" value="Yes" /></td>
  299. <td bgcolor="#FFE5E7"><input type="radio" name="texting_dur_school" value="No" /></td>
  300. <td bgcolor="#FFE5E7"></td>
  301.  </tr>
  302.  <tr>
  303. <td bgcolor="#FFF49A">online/texting outside of school</td>
  304. <td bgcolor="#FFF49A"><input type="radio" name="texting_out_school" value="Yes" /></td>
  305. <td bgcolor="#FFF49A"><input type="radio" name="texting_out_school" value="No" /></td>
  306. <td bgcolor="#FFF49A"></td>
  307.  </tr>
  308. </table>
  309. </td>
  310. </tr>
  311. </table>



  312. <br />
  313. <br />
  314.  
  315.  
  316. <!-- This table hidden on page load -->
  317. <div id="part2_question" class="current" style="display:none">
  318. <table width="100%" border="1" cellpadding="0" cellspacing="0">
  319. <tr>
  320. <td>
  321. <table width="100%">
  322. <tr>
  323. <td><strong>2b. Identify the online/texting programs where it occurred.</strong></td>
  324. <td><strong>Yes</strong></td>
  325. <td><strong>No</strong></td>
  326. </tr>
  327. <tr>
  328. <td bgcolor="#ddeeee">Facebook</td>
  329. <td bgcolor="#ddeeee"><input type="radio" name="Facebook" value="Yes" /></td>
  330. <td bgcolor="#ddeeee"><input type="radio" name="Facebook" value="No" /></td>
  331. <td bgcolor="#ddeeee"></td>
  332. </tr>
  333. <tr>
  334. <td>Twitter</td>
  335. <td><input type="radio" name="Twitter" value="Yes" /></td>
  336. <td><input type="radio" name="Twitter" value="No" /></td>
  337. <td></td>
  338. </tr>
  339. <tr>
  340. <td bgcolor="#ddeeee">IMing</td>
  341. <td bgcolor="#ddeeee"><input type="radio" name="IMing" value="Yes" /></td>
  342. <td bgcolor="#ddeeee"><input type="radio" name="IMing" value="No" /></td>
  343. <td bgcolor="#ddeeee"></td>
  344. </tr>
  345. <tr>
  346. <td>Email</td>
  347. <td><input type="radio" name="Email" value="Yes" /></td>
  348. <td><input type="radio" name="Email" value="No" /></td>
  349. <td></td>
  350. </tr>
  351. <tr>
  352. <td bgcolor="#ddeeee">Myspace</td>
  353. <td bgcolor="#ddeeee"><input type="radio" name="Myspace" value="Yes" /></td>
  354. <td bgcolor="#ddeeee"><input type="radio" name="Myspace" value="No" /></td>
  355. <td bgcolor="#ddeeee"></td>
  356. </tr>
  357. <tr>
  358. <td>Texting</td>
  359. <td><input type="radio" name="Texting" value="Yes" /></td>
  360. <td><input type="radio" name="Texting" value="No" /></td>
  361. <td></td>
  362. </tr>
  363. <tr>
  364. <td bgcolor="#ddeeee">Online Gaming</td>
  365. <td bgcolor="#ddeeee"><input type="radio" name="Online_Gaming" value="Yes" /></td>
  366. <td bgcolor="#ddeeee"><input type="radio" name="Online_Gaming" value="No" /></td>
  367. <td bgcolor="#ddeeee"></td>
  368. </tr>
  369. <tr>
  370. <td colspan="3">Other: 
  371. &nbsp; 
  372. <input type='text' name="other2b" value='' class='inputPickOneOther' size='50' />
  373. </td>
  374. </tr>
  375. </table>
  376. </td>
  377. </tr>
  378. </table>
  379. </div>


  380. <br />
  381. <br />


  382. <input id="signupsubmit" name="signup" type="submit" value="Signup" />


  383. </form>
  384.  


  385. </body>

  386. </html>