diff --git a/src/stepper/index.js b/src/stepper/index.js index e06b13940..e7ab49f78 100644 --- a/src/stepper/index.js +++ b/src/stepper/index.js @@ -2,6 +2,7 @@ import { createNamespace, isDef, addUnit } from '../utils'; import { resetScroll } from '../utils/dom/reset-scroll'; import { preventDefault } from '../utils/dom/event'; import { formatNumber } from '../utils/format/number'; +import { isNaN } from '../utils/validate/number'; import { FieldMixin } from '../mixins/field'; const [createComponent, bem] = createNamespace('stepper'); @@ -153,6 +154,7 @@ export default createComponent({ // format range value = value === '' ? 0 : +value; + value = isNaN(value) ? this.min : value; value = Math.max(Math.min(this.max, value), this.min); // format decimal @@ -210,7 +212,6 @@ export default createComponent({ this.$emit('focus', event); // readonly not work in lagacy mobile safari - /* istanbul ignore if */ if (this.disableInput && this.$refs.input) { this.$refs.input.blur(); } diff --git a/src/stepper/test/index.spec.js b/src/stepper/test/index.spec.js index 29b4cdef7..0a555e943 100644 --- a/src/stepper/test/index.spec.js +++ b/src/stepper/test/index.spec.js @@ -157,11 +157,30 @@ test('only allow interger', () => { expect(wrapper.emitted('input')[1][0]).toEqual(1); }); +test('input invalid value and blur', () => { + const wrapper = mount(Stepper, { + propsData: { + value: '', + }, + }); + + const input = wrapper.find('input'); + input.element.value = '.'; + input.trigger('input'); + input.trigger('blur'); + + expect(wrapper.emitted('input').pop()).toEqual([1]); +}); + test('stepper focus', () => { const wrapper = mount(Stepper); const input = wrapper.find('input'); input.trigger('focus'); expect(wrapper.emitted('focus')).toBeTruthy(); + + wrapper.setProps({ disableInput: true }); + input.trigger('focus'); + expect(wrapper.emitted('blur')).toBeTruthy(); }); test('stepper blur', () => {