|
|
@@ -22,14 +22,7 @@ if (isIE9) {
|
|
|
export default {
|
|
|
inserted (el, binding, vnode) {
|
|
|
if (vnode.tag === 'select') {
|
|
|
- const cb = () => {
|
|
|
- setSelected(el, binding, vnode.context)
|
|
|
- }
|
|
|
- cb()
|
|
|
- /* istanbul ignore if */
|
|
|
- if (isIE || isEdge) {
|
|
|
- setTimeout(cb, 0)
|
|
|
- }
|
|
|
+ setSelected(el, binding, vnode.context)
|
|
|
el._vOptions = [].map.call(el.options, getValue)
|
|
|
} else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {
|
|
|
el._vModifiers = binding.modifiers
|
|
|
@@ -67,37 +60,45 @@ export default {
|
|
|
}
|
|
|
|
|
|
function setSelected (el, binding, vm) {
|
|
|
- const value = binding.value
|
|
|
- const isMultiple = el.multiple
|
|
|
- if (isMultiple && !Array.isArray(value)) {
|
|
|
- process.env.NODE_ENV !== 'production' && warn(
|
|
|
- `<select multiple v-model="${binding.expression}"> ` +
|
|
|
- `expects an Array value for its binding, but got ${
|
|
|
- Object.prototype.toString.call(value).slice(8, -1)
|
|
|
- }`,
|
|
|
- vm
|
|
|
- )
|
|
|
- return
|
|
|
- }
|
|
|
- let selected, option
|
|
|
- for (let i = 0, l = el.options.length; i < l; i++) {
|
|
|
- option = el.options[i]
|
|
|
- if (isMultiple) {
|
|
|
- selected = looseIndexOf(value, getValue(option)) > -1
|
|
|
- if (option.selected !== selected) {
|
|
|
- option.selected = selected
|
|
|
- }
|
|
|
- } else {
|
|
|
- if (looseEqual(getValue(option), value)) {
|
|
|
- if (el.selectedIndex !== i) {
|
|
|
- el.selectedIndex = i
|
|
|
+ const cb = () => {
|
|
|
+ const value = binding.value
|
|
|
+ const isMultiple = el.multiple
|
|
|
+ if (isMultiple && !Array.isArray(value)) {
|
|
|
+ process.env.NODE_ENV !== 'production' && warn(
|
|
|
+ `<select multiple v-model="${binding.expression}"> ` +
|
|
|
+ `expects an Array value for its binding, but got ${
|
|
|
+ Object.prototype.toString.call(value).slice(8, -1)
|
|
|
+ }`,
|
|
|
+ vm
|
|
|
+ )
|
|
|
+ return
|
|
|
+ }
|
|
|
+ let selected, option
|
|
|
+ for (let i = 0, l = el.options.length; i < l; i++) {
|
|
|
+ option = el.options[i]
|
|
|
+ if (isMultiple) {
|
|
|
+ selected = looseIndexOf(value, getValue(option)) > -1
|
|
|
+ if (option.selected !== selected) {
|
|
|
+ option.selected = selected
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if (looseEqual(getValue(option), value)) {
|
|
|
+ if (el.selectedIndex !== i) {
|
|
|
+ el.selectedIndex = i
|
|
|
+ }
|
|
|
+ return
|
|
|
}
|
|
|
- return
|
|
|
}
|
|
|
}
|
|
|
+ if (!isMultiple) {
|
|
|
+ el.selectedIndex = -1
|
|
|
+ }
|
|
|
}
|
|
|
- if (!isMultiple) {
|
|
|
- el.selectedIndex = -1
|
|
|
+
|
|
|
+ cb()
|
|
|
+ /* istanbul ignore if */
|
|
|
+ if (isIE || isEdge) {
|
|
|
+ setTimeout(cb, 0)
|
|
|
}
|
|
|
}
|
|
|
|