diff --git a/src/core/vdom/patch.js b/src/core/vdom/patch.js index f7baa787faa..b5d89e02436 100644 --- a/src/core/vdom/patch.js +++ b/src/core/vdom/patch.js @@ -115,7 +115,7 @@ export function createPatchFunction (backend) { } vnode.elm = vnode.ns ? nodeOps.createElementNS(vnode.ns, tag) - : nodeOps.createElement(tag) + : nodeOps.createElement(tag, vnode) setScope(vnode) createChildren(vnode, children, insertedVnodeQueue) if (isDef(data)) { diff --git a/src/platforms/web/runtime/node-ops.js b/src/platforms/web/runtime/node-ops.js index 5b96e98f945..0891a24f8cd 100644 --- a/src/platforms/web/runtime/node-ops.js +++ b/src/platforms/web/runtime/node-ops.js @@ -2,8 +2,15 @@ import { namespaceMap } from 'web/util/index' -export function createElement (tagName: string): Element { - return document.createElement(tagName) +export function createElement (tagName: string, vnode: VNode): Element { + const elm = document.createElement(tagName) + if (tagName !== 'select') { + return elm + } + if (vnode.data && vnode.data.attrs && 'multiple' in vnode.data.attrs) { + elm.setAttribute('multiple', 'multiple') + } + return elm } export function createElementNS (namespace: string, tagName: string): Element { diff --git a/test/unit/features/directives/model-select.spec.js b/test/unit/features/directives/model-select.spec.js index e582523b9dc..9b6092f26e1 100644 --- a/test/unit/features/directives/model-select.spec.js +++ b/test/unit/features/directives/model-select.spec.js @@ -189,6 +189,21 @@ describe('Directive v-model select', () => { }).then(done) }) + it('multiple with static template', () => { + const vm = new Vue({ + template: + '' + }).$mount() + var opts = vm.$el.options + expect(opts[0].selected).toBe(true) + expect(opts[1].selected).toBe(true) + expect(opts[2].selected).toBe(true) + }) + it('multiple + v-for', done => { const vm = new Vue({ data: {