前言
不知道大家有没有遇到过通过函数修改了input中的值,但是没法触发blur事件的尴尬情况,最近公司有一个外置应用程序,通过热键触发,将选中的文字,按照前端设置好的顺序依次修改input的值,但是这样是没法触发input的事件的,而我通过查阅资料,发现了这个熟悉又陌生的属性:dispatchEvent,这个之前在学习的时候也有接触过,但是一直没有用到,今天就刚好可以使用到这个属性。
dispatchEvent简单用法
1 2 3 4 5 6 7 8
| const inputElement = document.getElementById('myInput');
const blurEvent = new Event('blur', { bubbles: true });
inputElement.dispatchEvent(blurEvent);
|
1 2 3 4 5 6 7 8
| const inputElement = document.getElementById('myInput');
const inputEvent = new Event('input', { bubbles: true });
inputElement.dispatchEvent(inputEvent);
|
以此类推,各种事件都可以触发
我遇到的问题
在我的项目中,我需要先将值录入,再触发blur事件,这个在普通input中是好使的,但是我在使用tdesign组件时,发现blur的时候,值还没有进去
我当时的代码是
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| const inputElement = document.getElementById('myInput');
const inputEvent = new Event('input', { bubbles: true });
inputElement.dispatchEvent(inputEvent);
const blurEvent = new Event('blur', { bubbles: true });
inputElement.dispatchEvent(blurEvent);
|
其实这种也很好解决,加个延时器就好了
1 2 3 4 5 6 7
| setTimeout(() => { const blurEvent = new Event('blur', { bubbles: true });
inputElement.dispatchEvent(blurEvent); }, 500);
|
好了,本篇文章就简单介绍到这里,希望对大家有所帮助,谢谢大家的阅读