MCPcopy
hub / github.com/vuejs/core / setSelected

Function setSelected

packages/runtime-dom/src/directives/vModel.ts:246–281  ·  view source on GitHub ↗
(el: HTMLSelectElement, value: any)

Source from the content-addressed store, hash-verified

244}
245
246function setSelected(el: HTMLSelectElement, value: any) {
247 const isMultiple = el.multiple
248 const isArrayValue = isArray(value)
249 if (isMultiple && !isArrayValue && !isSet(value)) {
250 __DEV__ &&
251 warn(
252 `<select multiple v-model> expects an Array or Set value for its binding, ` +
253 `but got ${Object.prototype.toString.call(value).slice(8, -1)}.`,
254 )
255 return
256 }
257
258 for (let i = 0, l = el.options.length; i < l; i++) {
259 const option = el.options[i]
260 const optionValue = getValue(option)
261 if (isMultiple) {
262 if (isArrayValue) {
263 const optionType = typeof optionValue
264 // fast path for string / number values
265 if (optionType === 'string' || optionType === 'number') {
266 option.selected = value.some(v => String(v) === String(optionValue))
267 } else {
268 option.selected = looseIndexOf(value, optionValue) > -1
269 }
270 } else {
271 option.selected = value.has(optionValue)
272 }
273 } else if (looseEqual(getValue(option), value)) {
274 if (el.selectedIndex !== i) el.selectedIndex = i
275 return
276 }
277 }
278 if (!isMultiple && el.selectedIndex !== -1) {
279 el.selectedIndex = -1
280 }
281}
282
283// retrieve raw value set via :value bindings
284function getValue(el: HTMLOptionElement | HTMLInputElement) {

Callers 2

mountedFunction · 0.85
updatedFunction · 0.85

Calls 8

isSetFunction · 0.90
warnFunction · 0.90
looseIndexOfFunction · 0.90
looseEqualFunction · 0.90
getValueFunction · 0.85
StringInterface · 0.85
someMethod · 0.80
hasMethod · 0.80

Tested by

no test coverage detected