// 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)
// 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) {