mirror of
https://gitee.com/element-plus/element-plus.git
synced 2024-11-29 17:58:08 +08:00
fix(components): [input] blur event fails when using textarea (#17836)
closed #17825
This commit is contained in:
parent
6d773919e7
commit
dc8cb90130
@ -331,21 +331,67 @@ describe('Input.vue', () => {
|
||||
const handleFocus = vi.fn()
|
||||
const handleBlur = vi.fn()
|
||||
|
||||
test('event:focus & blur', async () => {
|
||||
test('event:focus', async () => {
|
||||
const content = ref('')
|
||||
const wrapper = mount(() => (
|
||||
<Input
|
||||
placeholder="请输入内容"
|
||||
modelValue={content.value}
|
||||
onFocus={handleFocus}
|
||||
onBlur={handleBlur}
|
||||
/>
|
||||
))
|
||||
|
||||
const input = wrapper.find('input')
|
||||
|
||||
await input.trigger('focus')
|
||||
expect(handleFocus).toBeCalled()
|
||||
expect(handleFocus).toHaveBeenCalledOnce()
|
||||
})
|
||||
|
||||
test('event:blur', async () => {
|
||||
const content = ref('')
|
||||
const wrapper = mount(() => (
|
||||
<Input
|
||||
placeholder="请输入内容"
|
||||
modelValue={content.value}
|
||||
onBlur={handleBlur}
|
||||
/>
|
||||
))
|
||||
|
||||
const input = wrapper.find('input')
|
||||
|
||||
await input.trigger('blur')
|
||||
expect(handleBlur).toHaveBeenCalledOnce()
|
||||
})
|
||||
|
||||
test('textarea & event:focus', async () => {
|
||||
const content = ref('')
|
||||
const wrapper = mount(() => (
|
||||
<Input
|
||||
type="textarea"
|
||||
placeholder="请输入内容"
|
||||
modelValue={content.value}
|
||||
onFocus={handleFocus}
|
||||
/>
|
||||
))
|
||||
|
||||
const input = wrapper.find('textarea')
|
||||
|
||||
await input.trigger('focus')
|
||||
expect(handleFocus).toHaveBeenCalledOnce()
|
||||
})
|
||||
|
||||
test('textarea & event:blur', async () => {
|
||||
const content = ref('')
|
||||
const wrapper = mount(() => (
|
||||
<Input
|
||||
type="textarea"
|
||||
placeholder="请输入内容"
|
||||
modelValue={content.value}
|
||||
onBlur={handleBlur}
|
||||
/>
|
||||
))
|
||||
|
||||
const input = wrapper.find('textarea')
|
||||
|
||||
await input.trigger('blur')
|
||||
expect(handleBlur).toBeCalled()
|
||||
|
@ -130,6 +130,8 @@
|
||||
@compositionupdate="handleCompositionUpdate"
|
||||
@compositionend="handleCompositionEnd"
|
||||
@input="handleInput"
|
||||
@focus="handleFocus"
|
||||
@blur="handleBlur"
|
||||
@change="handleChange"
|
||||
@keydown="handleKeydown"
|
||||
/>
|
||||
@ -257,13 +259,17 @@ const textareaCalcStyle = shallowRef(props.inputStyle)
|
||||
|
||||
const _ref = computed(() => input.value || textarea.value)
|
||||
|
||||
const { wrapperRef, isFocused } = useFocusController(_ref, {
|
||||
afterBlur() {
|
||||
if (props.validateEvent) {
|
||||
elFormItem?.validate?.('blur').catch((err) => debugWarn(err))
|
||||
}
|
||||
},
|
||||
})
|
||||
// wrapperRef for type="text", handleFocus and handleBlur for type="textarea"
|
||||
const { wrapperRef, isFocused, handleFocus, handleBlur } = useFocusController(
|
||||
_ref,
|
||||
{
|
||||
afterBlur() {
|
||||
if (props.validateEvent) {
|
||||
elFormItem?.validate?.('blur').catch((err) => debugWarn(err))
|
||||
}
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
const needStatusIcon = computed(() => elForm?.statusIcon ?? false)
|
||||
const validateState = computed(() => elFormItem?.validateState || '')
|
||||
|
Loading…
Reference in New Issue
Block a user