diff --git a/src/platforms/web/runtime/directives/model.js b/src/platforms/web/runtime/directives/model.js
index c3b669f3bb5..cba8ded0d94 100644
--- a/src/platforms/web/runtime/directives/model.js
+++ b/src/platforms/web/runtime/directives/model.js
@@ -6,7 +6,7 @@
import { isTextInputType } from 'web/util/element'
import { looseEqual, looseIndexOf } from 'shared/util'
import { mergeVNodeHook } from 'core/vdom/helpers/index'
-import { warn, isAndroid, isIE9, isIE, isEdge } from 'core/util/index'
+import { warn, isIE9, isIE, isEdge } from 'core/util/index'
/* istanbul ignore if */
if (isIE9) {
@@ -34,15 +34,13 @@ const directive = {
} else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {
el._vModifiers = binding.modifiers
if (!binding.modifiers.lazy) {
+ el.addEventListener('compositionstart', onCompositionStart)
+ el.addEventListener('compositionend', onCompositionEnd)
// Safari < 10.2 & UIWebView doesn't fire compositionend when
// switching focus before confirming composition choice
// this also fixes the issue where some browsers e.g. iOS Chrome
// fires "change" instead of "input" on autocomplete.
el.addEventListener('change', onCompositionEnd)
- if (!isAndroid) {
- el.addEventListener('compositionstart', onCompositionStart)
- el.addEventListener('compositionend', onCompositionEnd)
- }
/* istanbul ignore if */
if (isIE9) {
el.vmodel = true
diff --git a/test/unit/features/directives/model-text.spec.js b/test/unit/features/directives/model-text.spec.js
index 7aae24b654e..77a9e3d8d02 100644
--- a/test/unit/features/directives/model-text.spec.js
+++ b/test/unit/features/directives/model-text.spec.js
@@ -183,27 +183,25 @@ describe('Directive v-model text', () => {
})
}
- if (!isAndroid) {
- it('compositionevents', function (done) {
- const vm = new Vue({
- data: {
- test: 'foo'
- },
- template: ''
- }).$mount()
- const input = vm.$el
- triggerEvent(input, 'compositionstart')
- input.value = 'baz'
- // input before composition unlock should not call set
- triggerEvent(input, 'input')
- expect(vm.test).toBe('foo')
- // after composition unlock it should work
- triggerEvent(input, 'compositionend')
- triggerEvent(input, 'input')
- expect(vm.test).toBe('baz')
- done()
- })
- }
+ it('compositionevents', function (done) {
+ const vm = new Vue({
+ data: {
+ test: 'foo'
+ },
+ template: ''
+ }).$mount()
+ const input = vm.$el
+ triggerEvent(input, 'compositionstart')
+ input.value = 'baz'
+ // input before composition unlock should not call set
+ triggerEvent(input, 'input')
+ expect(vm.test).toBe('foo')
+ // after composition unlock it should work
+ triggerEvent(input, 'compositionend')
+ triggerEvent(input, 'input')
+ expect(vm.test).toBe('baz')
+ done()
+ })
it('warn invalid tag', () => {
new Vue({