Skip to content

Commit 8183f07

Browse files
authored
Preserves pre-disabled elements with hx-disabled-elt on other element (#3443)
Closes #3437.
1 parent 7c07323 commit 8183f07

2 files changed

Lines changed: 17 additions & 3 deletions

File tree

src/htmx.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3395,8 +3395,10 @@ var htmx = (function() {
33953395
forEach(disabledElts, function(disabledElement) {
33963396
const internalData = getInternalData(disabledElement)
33973397
internalData.requestCount = (internalData.requestCount || 0) + 1
3398-
disabledElement.setAttribute('disabled', '')
3399-
disabledElement.setAttribute('data-disabled-by-htmx', '')
3398+
if (!disabledElement.hasAttribute('disabled')) {
3399+
disabledElement.setAttribute('disabled', '')
3400+
disabledElement.setAttribute('data-disabled-by-htmx', '')
3401+
}
34003402
})
34013403
return disabledElts
34023404
}
@@ -3418,7 +3420,7 @@ var htmx = (function() {
34183420
})
34193421
forEach(disabled, function(disabledElement) {
34203422
const internalData = getInternalData(disabledElement)
3421-
if (internalData.requestCount === 0) {
3423+
if (internalData.requestCount === 0 && disabledElement.hasAttribute('data-disabled-by-htmx')) {
34223424
disabledElement.removeAttribute('disabled')
34233425
disabledElement.removeAttribute('data-disabled-by-htmx')
34243426
}

test/attributes/hx-disabled-elt.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,18 @@ describe('hx-disabled-elt attribute', function() {
3939
fieldset.hasAttribute('disabled').should.equal(false)
4040
})
4141

42+
it('preserve pre-disabled elements', function() {
43+
this.server.respondWith('GET', '/test', 'ok')
44+
const b1 = make('<button hx-get="/test" hx-disabled-elt="#b2">Click Me!</button>')
45+
const b2 = make('<button id="b2" disabled></button>')
46+
b2.hasAttribute('disabled').should.equal(true)
47+
b2.hasAttribute('data-disabled-by-htmx').should.equal(false)
48+
b1.click()
49+
b2.hasAttribute('disabled').should.equal(true)
50+
this.server.respond()
51+
b2.hasAttribute('disabled').should.equal(true)
52+
})
53+
4254
it('multiple requests with same disabled elt are handled properly', function() {
4355
this.server.respondWith('GET', '/test', 'Clicked!')
4456
var b1 = make('<button hx-get="/test" hx-disabled-elt="#b3">Click Me!</button>')

0 commit comments

Comments
 (0)