From 47c73e69f82ac4c553e8148e1737ae35315bdb47 Mon Sep 17 00:00:00 2001 From: John Leider Date: Thu, 3 May 2018 21:39:17 -0400 Subject: [PATCH] fix(v-text-field): fire change event when pressing keydown.enter, the default behavior for an html input is to fire a change event fixes #2982 --- src/components/VTextField/VTextField.js | 9 ++++++++- .../components/VTextField/VTextField.spec.js | 16 ++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/components/VTextField/VTextField.js b/src/components/VTextField/VTextField.js index 1ea92d2cc97..2a60f2ae996 100755 --- a/src/components/VTextField/VTextField.js +++ b/src/components/VTextField/VTextField.js @@ -14,6 +14,11 @@ import Maskable from '../../mixins/maskable' // Directives import Ripple from '../../directives/ripple' +// Utilities +import { + keyCodes +} from '../../util/helpers' + const dirtyTypes = ['color', 'file', 'time', 'date', 'datetime-local', 'week', 'month'] export default { @@ -342,8 +347,10 @@ export default { this.internalValue = e.target.value this.badInput = e.target.validity && e.target.validity.badInput }, - onKeyDown () { + onKeyDown (e) { this.internalChange = true + + if (e.keyCode === keyCodes.enter) this.$emit('change', this.internalValue) }, onMouseDown (e) { // Prevent input from being blurred diff --git a/test/unit/components/VTextField/VTextField.spec.js b/test/unit/components/VTextField/VTextField.spec.js index 62cb1243598..e28753eae20 100644 --- a/test/unit/components/VTextField/VTextField.spec.js +++ b/test/unit/components/VTextField/VTextField.spec.js @@ -729,4 +729,20 @@ test('VTextField.js', ({ mount }) => { expect(wrapper.element.id).toBe('') expect(input.element.id).toBe('foo') }) + + it('should fire change event when pressing enter', () => { + const wrapper = mount(VTextField) + const input = wrapper.first('input') + const change = jest.fn() + + wrapper.vm.$on('change', change) + + input.trigger('focus') + input.element.value = 'foo' + input.trigger('input') + input.trigger('keydown.enter') + input.trigger('keydown.enter') + + expect(change).toHaveBeenCalledTimes(2) + }) })