fix(runtime-dom): fix option element value patching edge case (#4959)
fix #4956
This commit is contained in:
parent
3c449cd408
commit
89b2f924fc
@ -29,9 +29,12 @@ describe('runtime-dom: props patching', () => {
|
|||||||
// so we need to add tests for other elements
|
// so we need to add tests for other elements
|
||||||
test('value for non-text input', () => {
|
test('value for non-text input', () => {
|
||||||
const el = document.createElement('option')
|
const el = document.createElement('option')
|
||||||
|
el.textContent = 'foo' // #4956
|
||||||
patchProp(el, 'value', null, 'foo')
|
patchProp(el, 'value', null, 'foo')
|
||||||
|
expect(el.getAttribute('value')).toBe('foo')
|
||||||
expect(el.value).toBe('foo')
|
expect(el.value).toBe('foo')
|
||||||
patchProp(el, 'value', null, null)
|
patchProp(el, 'value', null, null)
|
||||||
|
el.textContent = ''
|
||||||
expect(el.value).toBe('')
|
expect(el.value).toBe('')
|
||||||
// #3475
|
// #3475
|
||||||
expect(el.getAttribute('value')).toBe(null)
|
expect(el.getAttribute('value')).toBe(null)
|
||||||
|
@ -31,7 +31,13 @@ export function patchDOMProp(
|
|||||||
// non-string values will be stringified.
|
// non-string values will be stringified.
|
||||||
el._value = value
|
el._value = value
|
||||||
const newValue = value == null ? '' : value
|
const newValue = value == null ? '' : value
|
||||||
if (el.value !== newValue) {
|
if (
|
||||||
|
el.value !== newValue ||
|
||||||
|
// #4956: always set for OPTION elements because its value falls back to
|
||||||
|
// textContent if no value attribute is present. And setting .value for
|
||||||
|
// OPTION has no side effect
|
||||||
|
el.tagName === 'OPTION'
|
||||||
|
) {
|
||||||
el.value = newValue
|
el.value = newValue
|
||||||
}
|
}
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
|
Loading…
Reference in New Issue
Block a user