Browse Source

better IE9 v-model support

dev
Evan You 9 years ago
parent
commit
5174bb2bd8
  1. 33
      src/runtime/directives/model.js

33
src/runtime/directives/model.js

@ -1,5 +1,15 @@
import { isAndroid, isIE9 } from '../util/env'
if (isIE9) {
// http://www.matts411.com/post/internet-explorer-9-oninput/
document.addEventListener('selectionchange', () => {
const el = document.activeElement
if (el && el.vmodel) {
trigger(el)
}
})
}
export default {
bind (el, value) {
if (!isAndroid) {
@ -7,8 +17,7 @@ export default {
el.addEventListener('compositionend', onCompositionEnd)
}
if (isIE9) {
el.addEventListener('cut', trigger)
el.addEventListener('keyup', triggerOnDelOrBackspace)
el.vmodel = true
}
},
unbind (el) {
@ -16,10 +25,6 @@ export default {
el.removeEventListener('compositionstart', onCompositionStart)
el.removeEventListener('compositionend', onCompositionEnd)
}
if (isIE9) {
el.removeEventListener('cut', trigger)
el.removeEventListener('keyup', triggerOnDelOrBackspace)
}
}
}
@ -29,17 +34,11 @@ function onCompositionStart (e) {
function onCompositionEnd (e) {
e.target.composing = false
trigger(e)
}
function trigger (e) {
const ev = document.createEvent('HTMLEvents')
ev.initEvent('input', true, true)
e.target.dispatchEvent(ev)
trigger(e.target)
}
function triggerOnDelOrBackspace (e) {
if (e.keyCode === 46 || e.keyCode === 8) {
trigger(e)
}
function trigger (el) {
const e = document.createEvent('HTMLEvents')
e.initEvent('input', true, true)
el.dispatchEvent(e)
}

Loading…
Cancel
Save