jQuery get value of select onChange
Categories:
jQuery: Dynamically Get Selected Value from a Dropdown (<select>
)

Learn how to efficiently capture the selected option's value from a dropdown menu using jQuery's change()
event handler.
Dropdown menus (<select>
elements) are fundamental components of web forms, allowing users to choose from a predefined list of options. In dynamic web applications, it's often necessary to react immediately when a user makes a selection. jQuery provides a straightforward and powerful way to detect changes in a dropdown and retrieve the newly selected value. This article will guide you through the process, covering basic implementation, common scenarios, and best practices.
The Basics: Using jQuery's .change()
Event
The core of detecting a change in a <select>
element with jQuery lies in the .change()
event handler. This event fires when the value of an element has been changed. For <select>
elements, this typically happens when a user selects a different option. Inside the event handler, you can use $(this)
to refer to the <select>
element that triggered the event, and then use .val()
to get its current selected value.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>jQuery Select Change Example</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
</head>
<body>
<h1>Select Your Favorite Fruit</h1>
<select id="fruitSelector">
<option value="">--Please choose an option--</option>
<option value="apple">Apple</option>
<option value="banana">Banana</option>
<option value="orange">Orange</option>
<option value="grape">Grape</option>
</select>
<p>You selected: <span id="selectedFruit"></span></p>
<script>
$(document).ready(function() {
$('#fruitSelector').change(function() {
var selectedValue = $(this).val();
$('#selectedFruit').text(selectedValue);
console.log('Selected fruit:', selectedValue);
});
});
</script>
</body>
</html>
In the example above, when a user selects a fruit from the dropdown, the change
event is triggered. The $(this).val()
method then retrieves the value
attribute of the currently selected <option>
, which is then displayed on the page and logged to the console.
Understanding the Workflow
To better visualize how the change
event and value retrieval work together, consider the following process flow. This diagram illustrates the sequence of actions from user interaction to the display of the selected value.
flowchart TD A[User selects option from dropdown] --> B["jQuery detects 'change' event on `<select>`"]; B --> C["Event handler function executes"]; C --> D["$(this) refers to the `<select>` element"]; D --> E["$(this).val() retrieves selected option's value"]; E --> F[Value is stored in a variable]; F --> G[Perform action with value (e.g., update UI, make AJAX call)]; G --> H[End];
Workflow for retrieving selected dropdown value on change
Handling Initial Selection and Edge Cases
Sometimes you might want to display the initially selected value when the page loads, or handle cases where no option is explicitly selected (e.g., a placeholder option). You can achieve this by triggering the change
event on page load or by checking for an empty value.
$(document).ready(function() {
var $fruitSelector = $('#fruitSelector');
// Function to update display
function updateSelectedFruit() {
var selectedValue = $fruitSelector.val();
if (selectedValue === '') {
$('#selectedFruit').text('Nothing selected yet');
} else {
$('#selectedFruit').text(selectedValue);
}
console.log('Current selection:', selectedValue);
}
// Attach change event handler
$fruitSelector.change(updateSelectedFruit);
// Trigger change event on page load to display initial selection
updateSelectedFruit();
});
$fruitSelector
in the example above.Retrieving Text vs. Value
It's important to distinguish between the value
attribute of an <option>
and its visible text content. The .val()
method always returns the value
attribute. If you need the visible text of the selected option, you can access it using $('option:selected', this).text()
or $(this).find('option:selected').text()
.
$(document).ready(function() {
$('#fruitSelector').change(function() {
var selectedValue = $(this).val(); // Gets the 'value' attribute
var selectedText = $('option:selected', this).text(); // Gets the visible text
console.log('Selected Value:', selectedValue);
console.log('Selected Text:', selectedText);
$('#selectedFruit').text('Value: ' + selectedValue + ', Text: ' + selectedText);
});
});
value
attribute is typically used for form submission and programmatic logic, while the text content is what the user sees. Choose the one that best fits your application's needs.