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
|
||||
test('value for non-text input', () => {
|
||||
const el = document.createElement('option')
|
||||
el.textContent = 'foo' // #4956
|
||||
patchProp(el, 'value', null, 'foo')
|
||||
expect(el.getAttribute('value')).toBe('foo')
|
||||
expect(el.value).toBe('foo')
|
||||
patchProp(el, 'value', null, null)
|
||||
el.textContent = ''
|
||||
expect(el.value).toBe('')
|
||||
// #3475
|
||||
expect(el.getAttribute('value')).toBe(null)
|
||||
|
@ -31,7 +31,13 @@ export function patchDOMProp(
|
||||
// non-string values will be stringified.
|
||||
el._value = 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
|
||||
}
|
||||
if (value == null) {
|
||||
|
Loading…
Reference in New Issue
Block a user