faqts : Computers : Programming : Languages : JavaScript : Forms

+ Search
Add Entry AlertManage Folder Edit Entry Add page to http://del.icio.us/
Did You Find This Entry Useful?

63 of 77 people (82%) answered Yes
Recently 7 of 10 people (70%) answered Yes

Entry

How do I collect the data from a FORM element?

Apr 22nd, 2000 05:31
Martin Honnen,


The following provides a constructor function
  FormData
to which you pass a form object. The function retrieves the data from 
the different kind of form elements into a fields object. Note that to 
account for multiple selects the data of a field differs according to 
the type: it is a string for all but multiple selects and an array of 
strings for multiple selects.

<HTML>
<HEAD>
<SCRIPT>
function FormData (form) {
  this.toString = FormData_toString;
  this.toQueryString = FormData_toQueryString;
  var fields = this.fields = new Object();
  for (var e = 0; e < form.elements.length; e++) {
    var field = form.elements[e];
    if (field.name) {
      if ((field.type.toLowerCase() == 'text'
          || field.type.toLowerCase() == 'textarea'
          || field.type.toLowerCase() == 'password'
          || field.type.toLowerCase() == 'file')
          && field.value) 
        fields[field.name] = field.value;
      else if ((field.type.toLowerCase() == 'checkbox' 
               || field.type.toLowerCase() == 'radio')
               && field.checked)
        fields[field.name] = field.value;
      else if (field.type.toLowerCase() == 'select-one'
               && field.selectedIndex != -1)
        fields[field.name] =
          field.options[field.selectedIndex].value;
      else if (field.type.toLowerCase() == 'select-multiple'
               && field.selectedIndex != -1) {
        fields[field.name] = new Array();
        for (var i = 0; i < field.options.length; i++)
          if (field.options[i].selected)
            fields[field.name][fields[field.name].length] =
              field.options[i].value;
      }       
    } 
  }
}
function FormData_toString () {
  var r = '';
  for (var field in this.fields)
    r += field + ': ' + this.fields[field] + '\n';
  return r;
}
function urlEncode (string) {
  string = string.replace(/ /g, '+');
  return escape(string);
}
function FormData_toQueryString () {
  var r = '';
  for (var field in this.fields)
    if (typeof this.fields[field] != 'string')
      for (var i = 0; i < this.fields[field].length; i++)
        r += urlEncode(field) + '=' + urlEncode(this.fields[field][i]) 
+ '&';
    else
      r += urlEncode(field) + '=' + urlEncode(this.fields[field]) + '&';
  r = r.substring(0, r.length - 1);
  return r;
}
  
</SCRIPT>
</HEAD>
<BODY>
<A HREF="javascript: var fd = new FormData(document.formName);
         alert(fd);
         void 0"
>
show form data
</A>
|
<A HREF="javascript: var fd = new FormData(document.formName);
         alert(fd.toQueryString());
         void 0"
>
show query string
</A>
<FORM NAME="formName">
<INPUT TYPE="text" NAME="aTextField" VALUE="JavaScript.FAQTs.com">
<BR>
<TEXTAREA NAME="aTextArea" ROWS="2" COLS="20">
JavaScript.FAQTs.com
</TEXTAREA>
<BR>
<INPUT TYPE="password" NAME="aPassword" VALUE="JavaScript">
<BR>
<INPUT TYPE="file" NAME="aFileName">
<BR>
<INPUT TYPE="radio" NAME="aRadioGroup" VALUE="radio1">
<INPUT TYPE="radio" NAME="aRadioGroup" VALUE="radio2">
<INPUT TYPE="radio" NAME="aRadioGroup" VALUE="radio3">
<BR>
<INPUT TYPE="checkbox" NAME="aCheckBox" VALUE="checkbox1">
<BR>
<SELECT NAME="select1">
<OPTION VALUE="Kibology">Kibology
<OPTION VALUE="Xibology">Xibology
<OPTION VALUE="Scriptology">Scriptology
</SELECT>
<BR>
<SELECT NAME="select2" MULTIPLE>
<OPTION VALUE="Kibology">Kibology
<OPTION VALUE="Xibology">Xibology
<OPTION VALUE="Scriptology">Scriptology
</SELECT>
<BR>
<INPUT TYPE="button" NAME="aButton" VALUE="button0">
<BR>
<INPUT TYPE="submit" NAME="aSubmit" VALUE="submit0">
</FORM>

</BODY>
</HTML>