Differences between type="image" and type="submit"?
Categories:
HTML Form Buttons: type="image" vs. type="submit"

Explore the key differences between <input type="image">
and <input type="submit">
in HTML forms, understanding their unique functionalities, use cases, and how they interact with server-side processing.
When building HTML forms, developers often encounter different ways to create buttons that trigger form submission. Two common methods involve using the <input>
tag with either type="image"
or type="submit"
. While both ultimately lead to form submission, they offer distinct functionalities, visual presentations, and implications for how data is sent to the server. Understanding these differences is crucial for choosing the right button type for your specific needs, ensuring optimal user experience and correct server-side processing.
Understanding <input type="submit">
The type="submit"
attribute creates a standard button that, when clicked, submits the form data to the URL specified in the form's action
attribute. It's the most straightforward and commonly used button type for form submission. Its appearance is typically controlled by the browser's default styling, which can then be customized with CSS. The text displayed on the button is defined by its value
attribute.
<form action="/process_form" method="post">
<label for="username">Username:</label>
<input type="text" id="username" name="username">
<input type="submit" value="Submit Form">
</form>
Basic HTML form with a submit button
value
attribute for type="submit"
buttons, as this text is read by screen readers.Understanding <input type="image">
The type="image"
attribute creates a graphical submit button. Instead of displaying text, it renders an image specified by its src
attribute. When a user clicks an image button, the form is submitted, but with an important distinction: the coordinates of the click relative to the image (in pixels) are also sent to the server. These coordinates are typically sent as two additional parameters, named after the name
attribute of the input, appended with .x
and .y
(e.g., buttonName.x=123&buttonName.y=45
). This functionality is particularly useful for applications requiring precise user interaction on an image, such as clickable maps or custom UI elements.
<form action="/process_image_click" method="post">
<label for="search_query">Search:</label>
<input type="text" id="search_query" name="query">
<input type="image" src="search_icon.png" alt="Search" name="search_button" width="32" height="32">
</form>
HTML form with an image button
type="image"
, always include a descriptive alt
attribute for accessibility. This text is displayed if the image cannot be loaded and is crucial for screen readers.Key Differences and Use Cases
The fundamental difference lies in their primary purpose and the data they transmit. type="submit"
is for general form submission, while type="image"
is for submitting a form with additional spatial data from a user's click on an image. This distinction dictates their ideal use cases.
flowchart TD A[User Clicks Button] B{Button Type?} B -- type="submit" --> C[Form Submits] C --> D[Sends Form Data Only] B -- type="image" --> E[Form Submits] E --> F[Sends Form Data + Click Coordinates (x, y)] F --> G[Server Processes Coordinates (e.g., clickable map)]
Flowchart illustrating the data submission difference
Consider the following scenarios:
- Standard Form Submission: For typical login forms, contact forms, or search boxes where only the input values are needed,
type="submit"
is the appropriate and simpler choice. - Interactive Image Maps: If you have an image (e.g., a map, a diagram, or a custom UI element) where the exact point of the user's click needs to be processed by the server,
type="image"
is invaluable. For example, selecting a region on a map or interacting with a visual puzzle. - Custom Button Styling: While
type="image"
provides a graphical button directly, modern CSS allows extensive styling oftype="submit"
buttons, often makingtype="image"
less necessary purely for visual customization. For purely aesthetic custom buttons, a<button>
tag with CSS background images is often preferred for better flexibility and accessibility.
Server-Side Processing Implications
When using type="image"
, your server-side script must be prepared to receive and interpret the name.x
and name.y
parameters. For example, in PHP, if your image button's name
is map_click
, you would access the coordinates via $_POST['map_click_x']
and $_POST['map_click_y']
(or $_GET
if the form method is GET). This adds a layer of complexity compared to simply reading standard form field values.
<?php
if (isset($_POST['search_button_x']) && isset($_POST['search_button_y'])) {
$x = $_POST['search_button_x'];
$y = $_POST['search_button_y'];
$query = $_POST['query'];
echo "Search query: {$query}, clicked at coordinates: ({$x}, {$y})";
} else if (isset($_POST['submit_form'])) {
$username = $_POST['username'];
echo "Username submitted: {$username}";
} else {
echo "No form submitted.";
}
?>
Example PHP code handling both submit and image button data