diff --git a/packages/components/date-picker/__tests__/date-picker.test.ts b/packages/components/date-picker/__tests__/date-picker.test.ts
index 4800e33c99..0e4687304f 100644
--- a/packages/components/date-picker/__tests__/date-picker.test.ts
+++ b/packages/components/date-picker/__tests__/date-picker.test.ts
@@ -899,6 +899,41 @@ describe('DatePicker', () => {
expect(popper.getAttribute('aria-hidden')).toBe('false')
})
})
+
+ describe('Trigger the change event when clearing the date picker', () => {
+ it('click the button to clear the date', async () => {
+ const changeHandler = vi.fn()
+ const wrapper = _mount(
+ ``,
+ () => ({ value: new Date(), changeHandler })
+ )
+
+ await wrapper.find('input').trigger('focus')
+ await wrapper.find('.el-input').trigger('mouseenter')
+ await wrapper.find('.clear-icon').trigger('click')
+ expect(changeHandler).toHaveBeenCalledTimes(1)
+ })
+
+ it('manually clear date', async () => {
+ const changeHandler = vi.fn()
+ const wrapper = _mount(
+ ``,
+ () => ({ value: new Date(), changeHandler })
+ )
+
+ const input = wrapper.find('input')
+ await input.trigger('focus')
+ await input.setValue('')
+ await input.trigger('blur')
+ expect(changeHandler).toHaveBeenCalledTimes(1)
+ })
+ })
})
describe('DatePicker Navigation', () => {
diff --git a/packages/components/time-picker/src/common/picker.vue b/packages/components/time-picker/src/common/picker.vue
index 7b0b28d200..63627c989c 100644
--- a/packages/components/time-picker/src/common/picker.vue
+++ b/packages/components/time-picker/src/common/picker.vue
@@ -292,6 +292,8 @@ const emitChange = (
// determine user real change only
if (isClear || !valueEquals(val, valueOnOpen.value)) {
emit('change', val)
+ // Set the value of valueOnOpen when clearing to avoid triggering change events multiple times.
+ isClear && (valueOnOpen.value = val)
props.validateEvent &&
formItem?.validate('change').catch((err) => debugWarn(err))
}
@@ -540,7 +542,7 @@ const handleChange = () => {
}
if (userInput.value === '') {
emitInput(valueOnClear.value)
- emitChange(valueOnClear.value)
+ emitChange(valueOnClear.value, true)
userInput.value = null
}
}