diff --git a/packages/vuetify/src/components/VCombobox/VCombobox.ts b/packages/vuetify/src/components/VCombobox/VCombobox.ts index 3bb5e8cbb81..056c32e51ab 100644 --- a/packages/vuetify/src/components/VCombobox/VCombobox.ts +++ b/packages/vuetify/src/components/VCombobox/VCombobox.ts @@ -214,10 +214,10 @@ export default VAutocomplete.extend({ // If the user is not searching // and no menu item is selected + // or if the search is empty // do nothing - if (menuIndex < 0 && - !this.searchIsDirty - ) return + if ((menuIndex < 0 && !this.searchIsDirty) || + !this.internalSearch) return if (this.editingIndex > -1) { return this.updateEditing() diff --git a/packages/vuetify/src/components/VCombobox/__tests__/VCombobox-multiple.spec.ts b/packages/vuetify/src/components/VCombobox/__tests__/VCombobox-multiple.spec.ts index 9f4c39f8609..f35b7908c91 100644 --- a/packages/vuetify/src/components/VCombobox/__tests__/VCombobox-multiple.spec.ts +++ b/packages/vuetify/src/components/VCombobox/__tests__/VCombobox-multiple.spec.ts @@ -455,4 +455,32 @@ describe('VCombobox.ts', () => { await wrapper.vm.$nextTick() expect(change).toHaveBeenLastCalledWith(['foo', 'bar']) }) + + // https://github.com/vuetifyjs/vuetify/issues/13274 + it('should not add empty values', async () => { + const { wrapper, change } = createMultipleCombobox({ + chips: true, + multiple: true, + items: ['foo'], + value: ['foo'], + }) + + const input = wrapper.find('input') + const element = input.element as HTMLInputElement + + // Add a value and then remove it + input.trigger('focus') + element.value = 'a' + input.trigger('input') + await wrapper.vm.$nextTick() + element.value = '' + input.trigger('input') + await wrapper.vm.$nextTick() + + // Lose focus + input.trigger('keydown.tab') + await wrapper.vm.$nextTick() + + expect(change).not.toHaveBeenCalled() + }) })