diff --git a/packages/alpinejs/src/magics/$id.js b/packages/alpinejs/src/magics/$id.js index 28a887df7..40f2f8a54 100644 --- a/packages/alpinejs/src/magics/$id.js +++ b/packages/alpinejs/src/magics/$id.js @@ -2,10 +2,8 @@ import { magic } from '../magics' import { closestIdRoot, findAndIncrementId } from '../ids' import { interceptClone } from '../clone' -magic('id', (el, { cleanup }) => (name, key = null) => { - let cacheKey = `${name}${key ? `-${key}` : ''}` - - return cacheIdByNameOnElement(el, cacheKey, cleanup, () => { +magic('id', (el, { cleanup }) => (name, key = null, cache = true) => { + const getId = () => { let root = closestIdRoot(el, name) let id = root @@ -15,7 +13,15 @@ magic('id', (el, { cleanup }) => (name, key = null) => { return key ? `${name}-${id}-${key}` : `${name}-${id}` - }) + } + + if (cache) { + let cacheKey = `${name}${key ? `-${key}` : ''}` + + return cacheIdByNameOnElement(el, cacheKey, cleanup, getId) + } else { + return getId() + } }) interceptClone((from, to) => { diff --git a/tests/cypress/integration/magics/$id.spec.js b/tests/cypress/integration/magics/$id.spec.js index 61296fac3..6061962a7 100644 --- a/tests/cypress/integration/magics/$id.spec.js +++ b/tests/cypress/integration/magics/$id.spec.js @@ -26,6 +26,47 @@ test('$id generates a unique id', } ) +test('$id can be forced to generate unique ids', + html` +