.blur() is jQuery’s legacy shorthand for binding or triggering the blur event — when an element loses focus. Binding is deprecated since 3.3; modern code uses .on("blur") / .trigger("blur").
Remember
// Legacy (still works; bind form deprecated since 3.3)
$("#email").blur(function () {
// field lost focus
});
// Modern replacements
$("#email").on("blur", handler); // bind
$("#email").trigger("blur"); // fire
// No-arg .blur() = trigger (prefer .trigger("blur"))
$("#email").blur();
Trigger with no-arg .blur() (legacy) or .trigger("blur") (preferred).
In the handler, use this / $(this) for the field that lost focus.
For form-level or dynamic fields, use focusout — .blur() does not bubble or delegate.
Piece
Required?
Role
handler
For bind form
function(event) — runs when focus leaves
eventData
Optional (1.4.3+)
Extra data available as event.data
No-arg call
For trigger
Fires blur on each matched element
Target elements
Yes
Focusable controls (inputs, etc.)
Pseudocode
Pseudocode
// Legacy
call element.blur(handler)
→ bind "blur" on element
call element.blur()
→ trigger "blur" on element
// Modern (jQuery 1.7+)
call element.on("blur", handler)
when element loses focus (Tab, click elsewhere, or trigger):
fire "blur" on element
call handler(event)
// Does NOT bubble — parent .blur(fn) won't see child blur
to migrate:
.blur(fn) → .on("blur", fn)
.blur(data, fn) → .on("blur", data, fn)
.blur() → .trigger("blur")
Wait. Validation runs after the user leaves the field.
Read.$(this).val() is the current text.
Check. Empty (after trim) → show an error.
Migrate. Prefer .on("blur", fn) for the same logic.
Example 5 — Migrate to .on("blur")
Both bind the same event — .on() is the recommended API for new code.
jQuery
$("#legacy").blur(function () {
$("#out").text("Legacy: .blur(fn) — deprecated since 3.3.");
});
$("#modern").on("blur", function () {
$("#out").text("Modern: .on('blur', fn) — use this for new code.");
});
Bonus. Only .on() supports delegation (via focusout mapping).
Edge Cases & Pitfalls
Watch for these when reading or migrating legacy .blur() code.
deprecated
Bind form deprecated since 3.3
Still works in jQuery 3.x, but new code should use .on("blur").
bubble
Does not bubble
A parent .blur(fn) will not see child blur. Use focusout for form-level handlers.
alert
Alerts can steal focus
Showing alert() inside a blur handler can cause awkward focus loops. Prefer updating a message in the page.
delegation
No built-in delegation
.blur(fn) cannot target future elements. Use $("#form").on("focusout", "input", fn).
Compatibility
Browser Support
The underlying blur event is a standard DOM focus event. The .blur() method is a jQuery API available since 1.0 (eventData since 1.4.3). Binding via .blur(handler) is deprecated since 3.3 but still functional in jQuery 3.x.
✓ Deprecated · jQuery 3.3
jQuery .blur()
Works in jQuery 1.x–3.x. Prefer .on('blur') / .trigger('blur') for new projects. Native equivalent: addEventListener('blur', fn).
100%With jQuery loaded
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
.blur()Legacy API
Bottom line: Safe in legacy projects. Migrate bindings to .on('blur') and triggers to .trigger('blur') when you touch form scripts.
Analysis
Performance Notes
Approach
Cost
Best for
Direct .on("blur") on known fields
Cheap
Static form fields
Delegated .on("focusout", selector, fn)
Cheap
Dynamic / many fields
Heavy work inside every blur
Can stutter
Keep handlers light; debounce network calls
The shorthand and .on("blur") cost the same for a single bind. Prefer .on() for clarity and delegation. Keep the callback light — validate and update UI, then stop.
Remember
Key Takeaways
Role: legacy bind/trigger when an element loses focus.
Migrate:.on("blur", fn) and .trigger("blur").
Two forms:.blur(fn) binds; no-arg .blur() triggers.
One line:.blur() is deprecated sugar for .on("blur") / .trigger("blur") — migrate when you touch the file.
Frequently Asked Questions
The .blur() method has two roles. With a handler — .blur(handler) or .blur(eventData, handler) — it binds a function that runs when the element loses focus. With no arguments — .blur() — it triggers the blur event on each matched element. Binding has been part of jQuery since 1.0 and is deprecated since 3.3.
Yes. The binding signatures .blur(handler) and .blur(eventData, handler) are deprecated since jQuery 3.3. Use .on("blur", handler) instead. The no-argument .blur() trigger still works, but .trigger("blur") is clearer. Legacy code continues to run in jQuery 3.x.
.blur(handler) registers a callback and does not fire immediately. .blur() with no arguments triggers the blur event — the same as .trigger("blur"). Check whether parentheses contain a function before reading legacy code.
Replace .blur(fn) with .on("blur", fn). Replace .blur(data, fn) with .on("blur", data, fn). Replace no-arg .blur() with .trigger("blur"). Cleanup with .off("blur"). Under the hood, .blur(handler) already delegates to .on("blur").
No. Native blur does not bubble. A parent .blur(fn) will not see child fields lose focus. Use focusout (or .on("focusout")) on the form for parent-level handlers. Since 1.4.2, jQuery maps blur to focusout in its delegation methods.
No. Direct .blur(fn) only binds to elements that already match. For dynamic fields, use .on("focusout", "input", fn) on a parent — another reason to prefer .on() over the shorthand.