From c2271ff52a5fca644dbb3a8f8edc3a0ca97d5b49 Mon Sep 17 00:00:00 2001 From: nciont Date: Wed, 9 Jan 2019 22:08:31 +0300 Subject: [PATCH 1/3] fix: handle empty placeholder case from #7138 --- src/platforms/web/runtime/modules/attrs.js | 2 +- .../features/directives/model-text.spec.js | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/platforms/web/runtime/modules/attrs.js b/src/platforms/web/runtime/modules/attrs.js index 61d004ed239..e7e021ea279 100644 --- a/src/platforms/web/runtime/modules/attrs.js +++ b/src/platforms/web/runtime/modules/attrs.js @@ -98,7 +98,7 @@ function baseSetAttr (el, key, value) { if ( isIE && !isIE9 && (el.tagName === 'TEXTAREA' || el.tagName === 'INPUT') && - key === 'placeholder' && !el.__ieph + key === 'placeholder' && value !== '' && !el.__ieph ) { const blocker = e => { e.stopImmediatePropagation() diff --git a/test/unit/features/directives/model-text.spec.js b/test/unit/features/directives/model-text.spec.js index 69e9851368a..7fdf115ea49 100644 --- a/test/unit/features/directives/model-text.spec.js +++ b/test/unit/features/directives/model-text.spec.js @@ -437,8 +437,8 @@ describe('Directive v-model text', () => { }) } - // #7138 if (isIE && !isIE9) { + // #7138 it('should not fire input on initial render of textarea with placeholder in IE10/11', done => { const el = document.createElement('div') document.body.appendChild(el) @@ -452,5 +452,21 @@ describe('Directive v-model text', () => { done() }, 17) }) + + // #9042 + it('should not block the first input event when placeholder is empty', done => { + const el = document.createElement('div') + document.body.appendChild(el) + const vm = new Vue({ + el, + data: { evtCount: 0 }, + template: ``, + }) + triggerEvent(vm.$el, 'input') + setTimeout(() => { + expect(vm.evtCount).toBe(1) + done() + }, 17) + }) } }) From e60a9a541368860cd15cf4d6e07c7a57a3a9fd99 Mon Sep 17 00:00:00 2001 From: Evan You Date: Mon, 4 Feb 2019 17:33:16 -0500 Subject: [PATCH 2/3] Update attrs.js --- src/platforms/web/runtime/modules/attrs.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/platforms/web/runtime/modules/attrs.js b/src/platforms/web/runtime/modules/attrs.js index e7e021ea279..2626deb9f6f 100644 --- a/src/platforms/web/runtime/modules/attrs.js +++ b/src/platforms/web/runtime/modules/attrs.js @@ -97,7 +97,7 @@ function baseSetAttr (el, key, value) { /* istanbul ignore if */ if ( isIE && !isIE9 && - (el.tagName === 'TEXTAREA' || el.tagName === 'INPUT') && + el.tagName === 'TEXTAREA' && key === 'placeholder' && value !== '' && !el.__ieph ) { const blocker = e => { From 9e58a635bc5bd711f1ef321d7a42f6a563b67744 Mon Sep 17 00:00:00 2001 From: Evan You Date: Mon, 4 Feb 2019 17:33:54 -0500 Subject: [PATCH 3/3] Update model-text.spec.js --- test/unit/features/directives/model-text.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/unit/features/directives/model-text.spec.js b/test/unit/features/directives/model-text.spec.js index 7fdf115ea49..7cf5167461f 100644 --- a/test/unit/features/directives/model-text.spec.js +++ b/test/unit/features/directives/model-text.spec.js @@ -460,7 +460,7 @@ describe('Directive v-model text', () => { const vm = new Vue({ el, data: { evtCount: 0 }, - template: ``, + template: ``, }) triggerEvent(vm.$el, 'input') setTimeout(() => {