From 2497d3982ef5cf7d72e4271d142f093fdc5a2177 Mon Sep 17 00:00:00 2001 From: Lluczel <124431759+Lluczel@users.noreply.github.com> Date: Sat, 10 Oct 2026 16:26:51 -0700 Subject: [PATCH] fix: HX-Trigger with null event detail no longer throws (#4135) --- src/htmx.js | 2 +- test/tests/unit/__handleTriggerHeader.js | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/htmx.js b/src/htmx.js index 0ff735822..d0aa292c5 100644 --- a/src/htmx.js +++ b/src/htmx.js @@ -866,7 +866,7 @@ var htmx = (() => { if (detail?.target) { target = this.find(detail.target); } - this.trigger(target, name, typeof detail === 'object' ? detail : {value: detail}); + this.trigger(target, name, detail !== null && typeof detail === 'object' ? detail : {value: detail}); } } else { value.split(',').forEach(name => this.trigger(elt, name.trim(), {})); diff --git a/test/tests/unit/__handleTriggerHeader.js b/test/tests/unit/__handleTriggerHeader.js index f36f0fdc4..2ad0a44c4 100644 --- a/test/tests/unit/__handleTriggerHeader.js +++ b/test/tests/unit/__handleTriggerHeader.js @@ -141,6 +141,16 @@ describe('__handleTriggerHeader unit tests', function() { assert.equal(eventDetail.value, 42) }) + it('wraps null detail in value property', function () { + let eventDetail = undefined + let container = createProcessedHTML('
') + container.addEventListener('myEvent', (e) => { eventDetail = e.detail }) + + htmx.__handleTriggerHeader('{"myEvent": null}', container) + + assert.isNull(eventDetail.value) + }) + it('works with hx-on listeners using from:body', function () { let root = createProcessedHTML(`