|
|
@@ -53,7 +53,14 @@ export default {
|
|
|
const prevOptions = el._vOptions
|
|
|
const curOptions = el._vOptions = [].map.call(el.options, getValue)
|
|
|
if (curOptions.some((o, i) => !looseEqual(o, prevOptions[i]))) {
|
|
|
- trigger(el, 'change')
|
|
|
+ // trigger change event if
|
|
|
+ // no matching option found for at least one value
|
|
|
+ const needReset = el.multiple
|
|
|
+ ? binding.value.some(v => hasNoMatchingOption(v, curOptions))
|
|
|
+ : binding.value !== binding.oldValue && hasNoMatchingOption(binding.value, curOptions)
|
|
|
+ if (needReset) {
|
|
|
+ trigger(el, 'change')
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -104,6 +111,10 @@ function actuallySetSelected (el, binding, vm) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+function hasNoMatchingOption (value, options) {
|
|
|
+ return options.every(o => !looseEqual(o, value))
|
|
|
+}
|
|
|
+
|
|
|
function getValue (option) {
|
|
|
return '_value' in option
|
|
|
? option._value
|