Skip to content
DevNursery.com - New Web Developer Docs
GitHub

HTML Forms

Writing HTML Forms and Accessing Form Data with JavaScript FormData Object HTML forms are a fundamental part of web applications, allowing users to input and submit data. JavaScript provides a powerful API called the FormData object that makes it easy to work with form data, whether you want to validate user inputs or send them to a server for processing. In this section, we’ll cover how to create HTML forms and access form data using the FormData object.

Creating an HTML Form

To create an HTML form, you need to use the <form> element along with various form controls like text inputs, checkboxes, radio buttons, and buttons. Here’s a basic example of an HTML form:

<form id="myForm">
    <label for="name">Name:</label>
    <input type="text" id="name" name="name" required>

    <label for="email">Email:</label>
    <input type="email" id="email" name="email" required>

    <label for="message">Message:</label>
    <textarea id="message" name="message" rows="4" required></textarea>

    <input type="submit" value="Submit">
</form>

In this example, we have created a simple form with three fields: Name, Email, and Message, and a Submit button. The id and name attributes are used to identify form elements, which will be crucial when accessing form data in JavaScript.

Accessing Form Data with JavaScript

The FormData object is a built-in JavaScript object that simplifies the process of accessing and working with form data. To access form data using FormData, follow these steps:

Select the Form Element: First, select the HTML form element using JavaScript. You can do this by using document.getElementById() or other DOM selection methods.

const form = document.getElementById('myForm');

Create a FormData Object: Create a FormData object by passing the selected form element as an argument.

const formData = new FormData(form);

Accessing Form Fields: You can now access individual form fields using the get() method of the FormData object, passing the name attribute of the form field as an argument.

const name = formData.get('name');
const email = formData.get('email');
const message = formData.get('message');

Working with Form Data: Once you’ve accessed the form fields, you can perform various operations, such as validation or sending the data to a server using AJAX.

Here’s a complete JavaScript example that listens for the form’s submission event, accesses the form data, and logs it to the console:

document.getElementById('myForm').addEventListener('submit', function(event) {
    event.preventDefault(); // Prevent the form from submitting in the traditional way

    const formData = new FormData(this); // Create a FormData object from the form

    // Access and log form data
    const name = formData.get('name');
    const email = formData.get('email');
    const message = formData.get('message');

    console.log('Name:', name);
    console.log('Email:', email);
    console.log('Message:', message);

    // Perform additional actions (e.g., validation, AJAX submission) here
});

Sending Form Data to a Server

Once you’ve obtained the form data using the FormData object, you can send it to a server for processing, often using AJAX or fetch. Here’s a brief example using the fetch API to send form data to a server:

document.getElementById('myForm').addEventListener('submit', function(event) {
    event.preventDefault(); // Prevent the form from submitting in the traditional way

    const formData = new FormData(this); // Create a FormData object from the form

    fetch('/your-server-endpoint', {
        method: 'POST',
        body: formData, // Pass the FormData object as the request body
    })
    .then(response => response.json())
    .then(data => {
        // Handle the response from the server
        console.log('Server response:', data);
    })
    .catch(error => {
        console.error('Error:', error);
    });
});

In this example, replace ‘/your-server-endpoint’ with the actual URL where you want to send the form data.

Using the FormData object simplifies the process of gathering form data and sending it to a server, making it a valuable tool for web developers working with user inputs and form submissions.

Form tag and tag attributes

The <form> tag is a fundamental HTML element used to create and define web forms on a webpage. It provides a structure for collecting user input and submitting it to a server for processing. In this section, we’ll explore the various properties and attributes of the <form> tag in detail.

<form action="/submit" method="post" enctype="multipart/form-data" id="myForm" name="registrationForm">
    <!-- Form controls (input fields, buttons, etc.) go here -->
</form>

Here’s a breakdown of the key attributes and properties of the <form> tag:

action (Attribute):

Description: Specifies the URL where the form data will be submitted when the user submits the form. It is an essential attribute for form submission. Example: action="/submit".

method (Attribute):

Description: Specifies the HTTP method used to send form data to the server. The two primary methods are “GET” and “POST.” Example: method="post".

enctype (Attribute):

Description: Specifies the encoding type used when the form data is sent to the server. It is mainly used for forms that include file uploads.

Common Values:

  • application/x-www-form-urlencoded (default): Used for normal form submissions.
  • multipart/form-data: Used when uploading files.
  • text/plain: Rarely used and sends data as plain text. Example: enctype="multipart/form-data".

id (Attribute):

Description: Provides a unique identifier for the form element, which can be used to target the form in JavaScript and CSS. Example: id="myForm".

name (Attribute):

Description: Assigns a name to the form, which can be used to reference the form in scripting languages and when processing form data on the server. Example: name="registrationForm".

autocomplete (Attribute):

Description: Controls whether the browser should provide autocomplete suggestions for form fields based on the user’s input history.

Common Values:

  • on: Allows autocomplete (default).
  • off: Disables autocomplete. Example: autocomplete="off".

target (Attribute):

Description: Specifies where the response to the form submission should be displayed. Common values include _self (default), _blank, _parent, and _top. Example: target="_blank".

novalidate (Attribute):

Description: When present, this boolean attribute disables browser-based form validation. It allows you to handle validation on the server or using custom JavaScript validation. Example: novalidate.

accept-charset (Attribute):

Description: Specifies the character encoding to use when submitting form data. It is typically set to “UTF-8” for international character support. Example: accept-charset="UTF-8".

onsubmit (Attribute):

Description: Allows you to specify JavaScript code to execute when the form is submitted. This attribute can be used for custom form validation or other actions. Example: onsubmit="return validateForm();".

Events:

Description: The <form> element supports various events, such as onsubmit, onreset, and others, which allow you to execute JavaScript code in response to user interactions with the form.

Form Controls:

Description: The <form> element can contain a variety of form controls, including text inputs, checkboxes, radio buttons, textareas, buttons, and more. These form controls are used to collect user input.

The <form> tag serves as a container for form controls and provides essential attributes and properties that control how the form behaves and where the form data is sent when submitted. Understanding these attributes is crucial for creating effective and functional web forms.

Input Tag and Attributes

The <input> tag is one of the most versatile and widely used form elements in HTML. It allows users to input various types of data, including text, numbers, dates, and more. In this section, we’ll explore the <input> tag and its numerous attributes in detail.

<input
  type="text"
  name="username"
  id="username"
  value="JohnDoe"
  placeholder="Enter your username"
  maxlength="30"
  required
  readonly
  disabled
  autocomplete="off"
  pattern="[A-Za-z0-9]+"
  title="Alphanumeric characters only"
  autofocus
  multiple
/>

Here’s an explanation of the most commonly used attributes for the <input> tag:

type (Attribute):

Description: Specifies the type of input data that the field will accept. Common values include “text,” “password,” “email,” “number,” “date,” “checkbox,” and more. Example: type="text".

name (Attribute):

Description: Assigns a unique name to the input field, which is used to identify the field when the form is submitted. It should be unique within the form. Example: name="username".

id (Attribute):

Description: Provides a unique identifier for the input field, which can be used to target the field in JavaScript and CSS. Example: id="username".

value (Attribute):

Description: Sets the initial value of the input field. This value can be pre-filled and submitted with the form data. Example: value="JohnDoe".

placeholder (Attribute):

Description: Displays a short hint or example text inside the input field, typically used to provide instructions or examples to the user. Example: placeholder="Enter your username".

maxlength (Attribute):

Description: Specifies the maximum number of characters allowed in the input field. Useful for limiting text input length. Example: maxlength="30".

required (Attribute):

Description: Indicates that the input field must be filled out before the form can be submitted. It enforces mandatory input. Example: required.

readonly (Attribute):

Description: Makes the input field read-only, meaning the user can view the value but cannot modify it. Useful for displaying data. Example: readonly.

disabled (Attribute):

Description: Disables the input field, making it unresponsive to user interactions. Similar to readonly but more restrictive. Example: disabled.

autocomplete (Attribute):

Description: Controls whether the browser should provide autocomplete suggestions for the input field based on the user’s input history.

Common Values:

  • on: Allows autocomplete (default).
  • off: Disables autocomplete. Example: autocomplete="off".

pattern (Attribute):

Description: Specifies a regular expression pattern that the input value must match. Useful for custom validation. Example: pattern="[A-Za-z0-9]+".

title (Attribute):

Description: Provides a tooltip or additional information when the user hovers over the input field. Helpful for accessibility. Example: title="Alphanumeric characters only".

autofocus (Attribute):

Description: Automatically gives focus to the input field when the page loads. Useful for improving user experience. Example: autofocus.

multiple (Attribute):

Description: Indicates that multiple values can be selected in the input field. Typically used with file upload inputs. Example: multiple.

These attributes, along with the type attribute, allow you to customize and control the behavior of <input> elements in your HTML forms. Depending on the type and combination of attributes, you can create various input fields, including text boxes, password fields, radio buttons, checkboxes, date pickers, and more. Understanding these attributes is essential for building interactive and user-friendly forms on your website.

<form> Element:

Usage: The <form> element is the core container for all form elements. It defines the start and end of a form and encapsulates form controls, such as text fields, checkboxes, and buttons.

Attributes: Common attributes include action (specifies the URL to which the form data is submitted), method (specifies the HTTP method for form submission, e.g., “GET” or “POST”), and enctype (specifies the encoding type for form data, especially useful for file uploads).

<form action="/submit" method="post" enctype="multipart/form-data">
  <!-- Form controls go here -->
</form>

<fieldset> Element:

Usage: The <fieldset> element groups related form controls together and provides a visual and semantic grouping. It is often used with the <legend> element to provide a title or description for the group.

Attributes: No specific attributes, but it’s common to use the disabled attribute to disable all form controls within the fieldset.

<fieldset>
  <legend>Contact Information</legend>
  <!-- Form controls related to contact info go here -->
</fieldset>

<legend> Element:

Usage: The <legend> element is used within a <fieldset> element to provide a title or description for the group of form controls contained within the fieldset. Attributes: No specific attributes, but you can style it using CSS.

<fieldset>
  <legend>Shipping Address</legend>
  <!-- Form controls related to shipping address go here -->
</fieldset>

<label> Element:

Usage: The <label> element defines a label for an <input>, <select>, <textarea>, or other form elements. It improves accessibility and allows users to click on the label to interact with the associated input element.

Attributes: The for attribute should match the id of the associated input element. html

<label for="username">Username:</label>
<input type="text" id="username" name="username" />

<datalist> Element:

Usage: The <datalist> element provides a list of predefined options for an <input> element with the list attribute. It offers auto-completion suggestions to users.

Attributes: No specific attributes, but it is used in conjunction with the list attribute of an <input>.

<input type="text" list="colors" />
<datalist id="colors">
  <option value="Red">
  <option value="Green">
  <option value="Blue">
</datalist>

<output> Element:

Usage: The <output> element is used to display the result of a calculation or the output of a script in a form. It is often associated with <input> elements that have the oninput attribute.

Attributes: The for attribute associates the <output> with the input element.

<input type="range" id="slider" oninput="result.value = slider.value" />
<output for="slider" id="result">50</output>

<meter> Element:

Usage: The <meter> element represents a scalar measurement within a known range. It is often used to display visual feedback for form input validation.

Attributes: min, max, value, and low, high, and optimum attributes are commonly used to define the meter’s values and thresholds.

<label for="diskUsage">Disk Usage:</label>
<meter
  id="diskUsage"
  min="0"
  max="100"
  value="75"
  low="30"
  high="70"
  optimum="10"
></meter>

These HTML elements help you structure and enhance the usability of your forms. Properly using these elements not only improves the visual presentation of your forms but also enhances accessibility and user experience.

Types of Inputs

Text Input ():

This is the most common input element. It allows users to enter single-line text. You can specify the maxlength attribute to limit the number of characters. Use the placeholder attribute to provide a hint to users about what to enter.

<input type="text" placeholder="Enter your name" maxlength="50">

Password Input ():

Similar to text input but obscures the entered text for security.

Useful for creating password fields. Does not display the actual characters entered; instead, it typically shows asterisks or dots.

<input type="password" placeholder="Password">

Email Input ():

Intended for email addresses.

Provides built-in validation to ensure valid email format.

Displays a warning if the email format is incorrect.

<input type="email" placeholder="Enter your email">

Number Input ():

Designed for numeric input. Can include up and down arrows for incrementing/decrementing the value. You can set the min and max attributes to define allowable value ranges.

<input type="number" min="0" max="100" step="1">

Checkbox ():

Represents a binary choice, such as agreeing to terms and conditions.

Multiple checkboxes can be selected simultaneously.

Use the checked attribute to pre-select the checkbox.

<input type="checkbox" checked> I agree to the terms and conditions

Radio Buttons ():

Allows users to select one option from a group of options.

All radio buttons within the same name attribute are treated as a group, and only one can be selected.

Use the checked attribute to pre-select one option.

<input type="radio" name="gender" value="male" checked> Male
<input type="radio" name="gender" value="female"> Female

File Input ():

Enables users to upload files from their device.

It opens a file dialog when clicked.

You can use the accept attribute to specify file types allowed for upload.

<input type="file" accept=".jpg, .png">

**Date and Time Inputs (, , ):

These inputs allow users to select dates and times.

type="date" displays a date picker. type="time" displays a time picker. type="datetime-local" combines date and time selection.

<input type="date">
<input type="time">
<input type="datetime-local">

Hidden Input ():

Not visible to users.

Useful for storing values to be submitted with the form (like CSRF Tokens).

<input type="hidden" name="user_id" value="123">

Color Input ():

Allows users to select colors.

Opens a color picker when clicked.

Returns the selected color as a hexadecimal value.

<input type="color">

**Range Input ():

Provides a slider control that allows users to select a value within a specified range. You can define the range using the min, max, and step attributes.

Useful for selecting values like volume,

brightness, or any continuous range.

<input type="range" min="0" max="100" step="5">

**Search Input ():

Designed for search queries. May have specific styling, such as a magnifying glass icon.

Some browsers provide auto-suggestions based on the search query.

<input type="search" placeholder="Search...">

**URL Input ():

Intended for entering URLs.

Provides built-in validation to ensure a valid URL format.

Displays a warning if the URL format is incorrect.

<input type="url" placeholder="Enter a URL">

**Tel Input ():

Used for telephone numbers.

Allows input of phone numbers, including international formats.

May trigger the device’s phone number keyboard layout.

<input type="tel" placeholder="Enter your phone number">

**Month and Week Inputs (, ):

These inputs allow users to select a specific month or week from a calendar.

type="month" displays a month picker. type="week" displays a week picker.

<input type="month">
<input type="week">

**Reset and Submit Buttons (, ):

These inputs are used to create reset and submit buttons within a form.

<input type="reset"> resets the form’s fields to their default values.

<input type="submit">submits the form data to the server.

<input type="reset" value="Reset">
<input type="submit" value="Submit">

**Button Input ():

Provides a generic button that can trigger custom JavaScript actions.

It’s not associated with form submission or resetting by default.

<input type="button" value="Click me" onclick="myFunction()">

**Image Input ():

Displays an image as a clickable input element. When clicked, it submits the form’s coordinates (x, y) where the user clicked. Useful for creating custom image-based buttons.

<input type="image" src="button.png" alt="Submit">