From: edison Date: Tue, 20 May 2025 00:43:51 +0000 (+0800) Subject: fix(compat): ensure false value on input retains value attribute (#13216) X-Git-Tag: v3.5.15~20 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1a664749d4d65a345589a6d78106ede7574cb2e1;p=thirdparty%2Fvuejs%2Fcore.git fix(compat): ensure false value on input retains value attribute (#13216) close #13205 --- diff --git a/packages/runtime-dom/src/modules/attrs.ts b/packages/runtime-dom/src/modules/attrs.ts index 95e0a14854..d7188aa9a1 100644 --- a/packages/runtime-dom/src/modules/attrs.ts +++ b/packages/runtime-dom/src/modules/attrs.ts @@ -79,6 +79,7 @@ export function compatCoerceAttr( } } else if ( value === false && + !(el.tagName === 'INPUT' && key === 'value') && !isSpecialBooleanAttr(key) && compatUtils.isCompatEnabled(DeprecationTypes.ATTR_FALSE_VALUE, instance) ) { diff --git a/packages/vue-compat/__tests__/misc.spec.ts b/packages/vue-compat/__tests__/misc.spec.ts index 1a873633b8..17fddd94c4 100644 --- a/packages/vue-compat/__tests__/misc.spec.ts +++ b/packages/vue-compat/__tests__/misc.spec.ts @@ -208,6 +208,20 @@ test('ATTR_FALSE_VALUE', () => { ).toHaveBeenWarned() }) +test('ATTR_FALSE_VALUE with false on input value', () => { + const vm = new Vue({ + template: ``, + }).$mount() + expect(vm.$el).toBeInstanceOf(HTMLInputElement) + expect(vm.$el.hasAttribute('value')).toBe(true) + expect(vm.$el.getAttribute('value')).toBe('false') + expect( + (deprecationData[DeprecationTypes.ATTR_FALSE_VALUE].message as Function)( + 'value', + ), + ).not.toHaveBeenWarned() +}) + test("ATTR_FALSE_VALUE with false value shouldn't throw warning", () => { const vm = new Vue({ template: `
`,