1  <!DOCTYPE html>
  2  <html>
  3  <head>
  4    <meta charset="utf-8">
  5    <title>OnSubmit Example</title>
  6  
  7  <!--
  8    File:  D:\cssd.local\E\Student Resources\Website Development I\CodeSamples\OnSubmitExample.html
  9    Copyright (c) 2022 by Jesse Heines.  All rights reserved.  May be freely
 10      copied or excerpted for educational purposes with credit to the author.
 11    updated by JMH on June 30, 2022 at 9:02 PM
 12
 13    This program adds a custom check when the form is submitted to ensure that the course
 14    title begins with "CSSD".
 15  -->
 16  
 17    <style>
 18      h2#title {                  /* main page title */
 19        color: blue ;
 20        margin-bottom: 0.2em ;
 21      }
 22      h3#semester {               /* page subtitle (semester dates) */
 23        color: blue ;
 24        margin-top: 0 ;
 25      }
 26      .nobot {                    /* eliminate the bottom margin */
 27        margin-bottom: 0 ;
 28      }
 29      .notop {                    /* eliminate the top margin */
 30        margin-top: 0 ;
 31      }
 32    </style>
 33  
 34    <script>
 35      // function added June 30, 2022
 36      var ErrorCheck = function() {
 37        // get the input object with ID "CourseTitle"
 38        var objCourseTitle = document.getElementById( "CourseTitle" ) ;
 39        // get that object's value (for input type="text", this is the text the user entered)
 40        var strCourseTitle = objCourseTitle.value ;
 41        // get the first four characters of that value (text)
 42        var strCourseTitleFirst4 = strCourseTitle.substr( 0, 4 ) ;
 43        // check that the first four characters are CSSD (in upper or lower case)
 44        if ( strCourseTitleFirst4.toUpperCase() != "CSSD" ) {
 45          // if they're not, display a helpful error message ...
 46          alert( "The course title must begin with 'CSSD'." ) ;
 47          // ... and prohibit submission of the form by returning false
 48          return false ;
 49        } else {
 50          // otherwise, all submission of the form by returning true
 51          return true ;
 52        }
 53      }
 54    </script>
 55  </head>
 56  
 57  <body>
 58    <!-- display the page title and semester dates -->
 59    <h2 id="title">Corrections Special School District</h2>
 60    <h3 id="semester">Semester:&nbsp; April 4 to June 17, 2022</h3>
 61  
 62    <!-- instructions to the user -->
 63    <p><br>
 64      <em>Please provide the following information.</em></p>
 65  



 66    <!-- form to create a new table entry -->
 67    <!--
 68      Note the addition of an onsubmit attribute on June 30, 2022.  The only other thing that
 69      has changed is that I added defaults for each form element:
 70        (a) the Room Number defaults to "1"
 71        (b) the Instructor Name defaults to "Jones"
 72        (c) the Time Slot defaults to "8:40 AM to 10:00 AM"
 73        (d) the Course Title defaults to "CSSD"
 74    -->
 75    <form method="get" action="OnSubmitExample_Handler.html"
 76          onsubmit="return ErrorCheck() ;">
 77      <!--
 78        The value of the name attribute in each of the following form elements will be the
 79        key passed when the form in submitted.  This key is what is used to identify each
 80        data item.
 81            Note that unlike most other attributes, the required attribute does not have a
 82        corresponding value.  It is used simply on its own.
 83      -->
 84  
 85      <!-- spinner form element -->
 86      <p>Room Number:&nbsp;
 87      <input type="number" name="room" min="1" max="10" step="1"
 88             value="1" required></p>
 89      <!--
 90        Input type number is a spinner.  A spinner has minimum, maximum, and step values.
 91        Setting the initial value to blank ("") forces the user to enter a value within
 92        the specified range.
 93      -->
 94  
 95      <!-- select form element (or dropdown list) -->
 96      <p>Instructor Name:&nbsp;
 97        <select name="instructor" required>
 98          <option value="" selected disabled hidden>Choose an instructor</option>
 99          <option value="Lees">Lees</option>
100          <option value="Burzycki">Burzycki</option>
101          <option value="Latorella">Latorella</option>
102          <option value="Jones" selected>Jones</option>
103          <option value="Mosher">Mosher</option>
104          <option value="Piper">Piper</option>
105          <option value="Kroll">Kroll</option>
106          <option value="Spires">Spires</option>
107        </select>
108      <!--
109        The first option above prompts the user with instructions.  However, this option
110        cannot be selected.  The user is forced to select one of the other options.
111            It is also possible to specify how many of the options should initially be
112        visible, but this can sometimes confuse the user into thinking that those are the
113        only options available.
114      -->
115  
116      <!-- radio buttons group -->
117      <p class="nobot">Time Slot:</p>
118      <blockquote class="notop">
119        <input type="radio" name="timeslot" value="A" required>
120          <label for="A">7:10 AM to 8:30 AM</label><br>
121        <input type="radio" name="timeslot" value="B" checked>
122          <label for="B">8:40 AM to 10:00 AM</label><br>
123        <input type="radio" name="timeslot" value="C">
124            <label for="C">10:10 AM to 11:30 AM</label><br>
125        <input type="radio" name="timeslot" value="D">
126          <label for="D">11:40 AM to 1:00 PM</label><br>
127        <input type="radio" name="timeslot" value="E">
128          <label for="E">1:10 PM to 2:30 PM</label>
129      </blockquote>



130      <!--
131        Note that here we display the actual times to the user via the label tag.  However,
132        the input tag's value attribute specifies only a single letter.  Therefore, it is
133        the letter that is passed to the handler page, not the full time string.
134      -->
135  
136      <!-- text input form element -->
137      <p>Course Title:&nbsp;
138        <input type="text" name="course" id="CourseTitle" size="40" value="CSSD" required></p>
139      <!--
140        This element allows the user to enter a single line of text.
141            Note the size attribute.  This value controls the width of the form, not the
142        number of characters that the user can enter.  To limit then number of characters,
143        add a maxlength attribute to the above code.
144      -->
145  
146      <!-- the action buttons -->
147      <br>
148      <input type="Reset" value="Start Over"> &nbsp; &nbsp;
149      <input type="Submit" value="Submit Class Information">
150      <!--
151        Input type reset returns the form to its initial state.  Note that in these two
152        cases, the value attribute specifies the text to be displayed on the buttons.
153            Input type submit checks to make sure that all the required fields have legal
154        values, packages up those values into a query string, and then passes that query
155        string to the page specified in the form tag's action attribute.
156            To do more sophisticated error checking to ensure that all data entered by the
157        user is valid, one can write JavaScript code that will get executed before the data
158        is passed to the handler page.
159      -->
160  
161    </form>
162  
163  </body>
164  
165  </html>
166  
167  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
168  
169  <!DOCTYPE html>
170  <html>
171  <head>
172    <meta charset="utf-8">
173    <title>Basic Form Handler</title>
174  
175  <!--
176    File:  \\cssd.local\Student Resources\Website Development I\CodeSamples\OnSubmitExample_Handler.html
177    Copyright (c) 2022 by Jesse Heines.  All rights reserved.  May be freely
178      copied or excerpted for educational purposes with credit to the author.
179    updated by JMH on June 11, 2022 at 5:29 PM
180  
181    updated by JMH on June 30, 2022 at 9:24 PM
182        The only thing that has changed in this file is that the "Return to the Form Page"
183      button returnes to OnSubmitExample.html rather than BasicForm.html.
184  -->
185  
186    <script>
187      // define an array of the time slots
188      // Note that the array subscripts can be strings, in this case single letters.
189      arrTimeSlots = new Array() ;
190      arrTimeSlots["A"] = "7:10 AM to 8:30 AM" ;
191      arrTimeSlots["B"] = "8:40 AM to 10:00 AM" ;
192      arrTimeSlots["C"] = "10:10 AM to 11:30 AM" ;
193      arrTimeSlots["D"] = "11:40 AM to 1:00 PM" ;
194      arrTimeSlots["E"] = "1:10 PM to 2:30 PM" ;
195    </script>
196  
197
198    <style>
199      h2#title {                  /* main page title */
200        color: blue ;
201        margin-bottom: 0.2em ;
202      }
203      h3#semester {               /* page subtitle (semester dates) */
204        color: blue ;
205        margin-top: 0 ;
206      }
207      .colorBlue {                 /* to display text in blue */
208        color: blue ;
209      }
210      </style>
211  </head>
212  
213  <body>
214    <!-- display the page title and semester dates -->
215    <h2 id="title">Corrections Special School District</h2>
216    <h3 id="semester">Semester:&nbsp; April 4 to June 17, 2022</h3>
217  
218    <script>
219      //// CHECK FOR AND PARSE THE QUERY STRING
220  
221      var strQuery = window.location.search ;
222      if ( strQuery == "" ) {
223        document.writeln( "<p><br>" +
224            "<em>You didn&rsquo;t enter any information.&nbsp; " +
225            "Please click the </em><strong>Return to Form</strong><em> button " +
226            "to try again.</em></p>") ;
227      } else {
228        // This would be a nice place to use a table, but here I have used regular
229        // paragraphs for simplicity.
230        document.writeln( "<p><br>" +
231            "<em>Thank you.&nbsp; You entered the following information.</em></p>" ) ;
232  
233        // Note that URLSearchParams is a special type of function called a constructor.
234        // It takes the query string as its argument and constructs an object from which we
235        // can subsequently extract the values entered by the user in the various form fields
236        // on the main form page.
237        var urlParams = new URLSearchParams( strQuery ) ;
238        var strRoomNumber = urlParams.get( "room" ) ;
239        var strInstructorName = urlParams.get( "instructor" ) ;
240        var strCourseTitle = urlParams.get( "course" ) ;
241        var strTimeSlot = arrTimeSlots[ urlParams.get( "timeslot" ) ] ;
242  
243        // display the data entered by the user
244        document.writeln( "<p>Room Number:&nbsp; <strong class='colorBlue'>" +
245            strRoomNumber + "</strong>" ) ;
246        document.writeln( "<p>Instructor Name:&nbsp; <strong class='colorBlue'>" +
247            strInstructorName + "</strong>" ) ;
248        document.writeln( "<p>Course Title:&nbsp; <strong class='colorBlue'>" +
249            strCourseTitle + "</strong>" ) ;
250        document.writeln( "<p>Time Slot:&nbsp; <strong class='colorBlue'>" +
251            strTimeSlot + "</strong>" ) ;
252      }
253    </script>
254  
255    <p><br>
256      <input type="button" value="Return to the Form Page"
257             onclick="window.location.replace( 'OnSubmitExample.html' ) ;"></p>
258  </body>
259  
260  </html>