The change event fires when an input, select, or textareavalue changes. Bind with .on("change", handler) (since jQuery 1.7). Selects / checkboxes / radios fire immediately; text fields fire after the value changed and the field loses focus.
Remember
$(".target").on("change", function () {
// value committed / selection changed
});
$(".target").trigger("change"); // fire in code
// .val() does NOT fire change — trigger after script updates
$("#country").val("US").trigger("change");
// Legacy shorthand: .change() — prefer .on / .trigger
Bind on controls whose committed value should drive UI or logic.
Select input, select, or textarea elements.
Call .on("change", handler) — optional eventData before the handler.
In the handler, read $(this).val() (or selected option text).
Remember timing: select/checkbox = immediate; text = on blur if value changed.
After .val(), call .trigger("change") if handlers must run.
Piece
Required?
Role
Element
Yes
input, select, or textarea
"change"
Yes
Event type string
handler
Yes (to bind)
Runs when the value is committed
eventData
Optional
Passed as event.data
.trigger("change")
Optional
Run handlers from code
Pseudocode
Pseudocode
element.on("change", handler)
when user changes value:
if select / checkbox / radio:
fire change immediately
if text / textarea:
fire change on blur only if value differs
when script sets .val(newValue):
change does NOT fire
call element.trigger("change") if handlers must run
// Bubbles — parent .on("change", "select", fn) works for delegation
Reference
Cheat Sheet
Keep these facts handy while wiring form UX.
Topic
Detail
Bind
.on("change" [, data], handler) (1.7+)
Trigger
.trigger("change") (1.0+)
Timing
Select/checkbox: immediate · text: on blur if changed
change on #select → Option 2
— or (after edit + leave text) —
change on #text → hello world
How It Works
Select.$(".target") matches the text input and select.
Bind..on("change", …) registers one handler for both.
Select. Picking a new option fires change immediately.
Text. Edit, then leave the field — change fires only if the value differs.
Example 2 — Trigger Change from a Button
Official pattern: another control can fire the same handlers.
jQuery
$(".target").on("change", function () {
$("#out").text("change handler ran on #" + this.id);
});
$("#other").on("click", function () {
$(".target").trigger("change");
});
On load → You picked: Chocolate
User picks Candy → You picked: Candy
How It Works
Bind. The handler reads the selected option’s text.
Init..trigger("change") runs it once for the default.
Pick. Changing the select updates the label immediately.
Pattern. Common for summaries that must match the UI on load.
Example 4 — .val() Does Not Fire Change
Script updates stay silent until you trigger explicitly.
jQuery
$("#tier").on("change", function () {
$("#out").text("Tier is now: " + $(this).val());
});
$("#set-silent").on("click", function () {
$("#tier").val("pro");
$("#out").text("Silent .val — handler did not run.");
});
$("#set-trigger").on("click", function () {
$("#tier").val("enterprise").trigger("change");
});
Data. The object before the handler becomes event.data.
Change. Picking a new plan runs the handler.
Value.$(this).val() is the new option value.
Label.event.data.currency is shared metadata.
Edge Cases & Pitfalls
Watch for these when using change in real forms.
.val()
.val() does not fire change
Script updates stay silent. Chain .trigger("change") when handlers must run.
timing
Text waits for blur
Selects and checkboxes fire immediately; text fields fire on blur only if the value changed.
blur
blur ≠ change
Leaving a field without editing fires blur, not change.
legacy
.change() is deprecated
Since jQuery 3.3, prefer .on("change") and .trigger("change") over the shorthand method.
Compatibility
Browser Support
The change event is a standard form event. jQuery’s .on("change") API has been available since 1.7; .trigger("change") since 1.0. Bubbling in IE was normalized since jQuery 1.4.
✓ Stable · Form event
change event
Supported in all modern browsers. Prefer jQuery 3.x so .on("change") / .trigger("change") and consistent bubbling are available.
100%Event support
Google ChromeAll versions · Desktop & Mobile
Full support
Mozilla FirefoxAll versions · Desktop & Mobile
Full support
Apple SafariAll versions · macOS & iOS
Full support
Microsoft EdgeAll versions · Chromium & Legacy
Full support
Internet ExplorerIE 6+ · Legacy environments
Full support
OperaAll modern versions
Full support
changeUniversal
Bottom line: Safe for production forms. Use .on("change") for value commits; trigger after .val() when script updates must notify handlers.
Analysis
Performance Notes
Approach
Cost
Best for
$el.on("change", fn)
Cheap
Known static fields
$form.on("change", "select", fn)
Cheap
Dynamic / many controls
Heavy work in every change
Can stutter
Keep handlers light; debounce network
Change handlers run only when a value is committed (or you trigger). Keep them short — update a label or toggle UI — and avoid network calls on every change unless you debounce.
Remember
Key Takeaways
Role: react when a form value is committed.
Modern API:.on("change") / .trigger("change") — not .change().
.val() trap: script updates need an explicit trigger.
Timing: select immediate; text on blur if changed.
One line:change means “this control’s value just committed” — bind with .on("change").
Frequently Asked Questions
The change event fires when an input, select, or textarea value changes. Bind with .on("change", handler) (since 1.7). Selects, checkboxes, and radios fire immediately; text fields fire when the value changed and the field loses focus.
blur fires whenever focus leaves — even if the value did not change. change fires only when the committed value is different. Tab out without editing → blur yes, change no. Edit and leave → both can fire.
No. Setting a value with .val("new") does not fire change. After a script update, call .trigger("change") if handlers must run: $("#country").val("US").trigger("change").
Call $(".target").trigger("change"). Available since jQuery 1.0. Useful after AJAX fills a select or when syncing dependent dropdowns.
Yes. In modern browsers change bubbles, and jQuery normalized IE since 1.4. You can delegate: $("#form").on("change", "select", fn) for current and future selects.
change is the event name used with .on("change") / .trigger("change"). .change() is the deprecated shorthand method — prefer .on / .trigger in new code (deprecated since jQuery 3.3).