Skip to content

Commit db374e5

Browse files
yangxiuxiu1115RicardoEriiyangchangtao
authored
fix(runtime-dom): v-model string/number coercion for multiselect options (#10576)
Co-authored-by: RicardoErii <‘[email protected]’> Co-authored-by: yangchangtao <[email protected]>
1 parent 01172fd commit db374e5

File tree

2 files changed

+33
-3
lines changed

2 files changed

+33
-3
lines changed

packages/runtime-dom/__tests__/directives/vModel.spec.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1237,4 +1237,36 @@ describe('vModel', () => {
12371237
await nextTick()
12381238
expect(data.value).toEqual('使用拼音输入')
12391239
})
1240+
1241+
it('multiple select (model is number, option value is string)', async () => {
1242+
const component = defineComponent({
1243+
data() {
1244+
return {
1245+
value: [1, 2],
1246+
}
1247+
},
1248+
render() {
1249+
return [
1250+
withVModel(
1251+
h(
1252+
'select',
1253+
{
1254+
multiple: true,
1255+
'onUpdate:modelValue': setValue.bind(this),
1256+
},
1257+
[h('option', { value: '1' }), h('option', { value: '2' })],
1258+
),
1259+
this.value,
1260+
),
1261+
]
1262+
},
1263+
})
1264+
render(h(component), root)
1265+
1266+
await nextTick()
1267+
const [foo, bar] = root.querySelectorAll('option')
1268+
1269+
expect(foo.selected).toEqual(true)
1270+
expect(bar.selected).toEqual(true)
1271+
})
12401272
})

packages/runtime-dom/src/directives/vModel.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -242,9 +242,7 @@ function setSelected(el: HTMLSelectElement, value: any, number: boolean) {
242242
const optionType = typeof optionValue
243243
// fast path for string / number values
244244
if (optionType === 'string' || optionType === 'number') {
245-
option.selected = value.includes(
246-
number ? looseToNumber(optionValue) : optionValue,
247-
)
245+
option.selected = value.some(v => String(v) === String(optionValue))
248246
} else {
249247
option.selected = looseIndexOf(value, optionValue) > -1
250248
}

0 commit comments

Comments
 (0)