Skip to content

Commit ec7fca8

Browse files
posvayyx990803
authored andcommitted
Fix multiple attr in select with undefined value (#4859)
Fix #4855
1 parent 8bf5af8 commit ec7fca8

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

src/platforms/web/runtime/node-ops.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ export function createElement (tagName: string, vnode: VNode): Element {
77
if (tagName !== 'select') {
88
return elm
99
}
10-
if (vnode.data && vnode.data.attrs && 'multiple' in vnode.data.attrs) {
10+
// false or null will remove the attribute but undefined will not
11+
if (vnode.data && vnode.data.attrs && vnode.data.attrs.multiple !== undefined) {
1112
elm.setAttribute('multiple', 'multiple')
1213
}
1314
return elm

test/unit/features/directives/model-select.spec.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,22 @@ describe('Directive v-model select', () => {
287287
}).then(done)
288288
})
289289

290+
it('should not have multiple attr with falsy values except \'\'', () => {
291+
const vm = new Vue({
292+
template:
293+
'<div>' +
294+
'<select id="undefined" :multiple="undefined"></select>' +
295+
'<select id="null" :multiple="null"></select>' +
296+
'<select id="false" :multiple="false"></select>' +
297+
'<select id="string" :multiple="\'\'"></select>' +
298+
'</div>'
299+
}).$mount()
300+
expect(vm.$el.querySelector('#undefined').multiple).toEqual(false)
301+
expect(vm.$el.querySelector('#null').multiple).toEqual(false)
302+
expect(vm.$el.querySelector('#false').multiple).toEqual(false)
303+
expect(vm.$el.querySelector('#string').multiple).toEqual(true)
304+
})
305+
290306
it('multiple with static template', () => {
291307
const vm = new Vue({
292308
template:

0 commit comments

Comments
 (0)