Javascript 如何在事件处理期间更改HTML?

Javascript 如何在事件处理期间更改HTML?,javascript,dom-events,Javascript,Dom Events,在所有事件完成之前,html中的更改不会发生 (函数(){ 功能睡眠(ms){ const date=date.now(); 做{ }while(Date.now()-Date{ event.target.value='aaa'; 睡眠(1000);//或者另一个漫长的过程 event.target.value='bbb'; });/**/ //即便如此: addEventListener('click',event=>{ event.target.value='aaa'; }); addEv

在所有事件完成之前,html中的更改不会发生

(函数(){
功能睡眠(ms){
const date=date.now();
做{
}while(Date.now()-Date{
event.target.value='aaa';
睡眠(1000);//或者另一个漫长的过程
event.target.value='bbb';
});/**/
//即便如此:
addEventListener('click',event=>{
event.target.value='aaa';
});
addEventListener('click',event=>{
睡眠(1000);//或者另一个漫长的过程
});
addEventListener('click',event=>{
event.target.value='bbb';
});
})();

正如Martin在评论中提到的,您应该了解对象和异步操作。见:

这是您的MDN示例代码片段

(函数(){
功能睡眠(ms){
返回新承诺((解决、拒绝)=>{
设置超时(()=>{
决议(“完成”);
},ms);
})
}
let button=document.getElementById('update');
//基本代码示例:
addEventListener('click',event=>{
sleep(2000)。然后(res=>event.target.value=res);//或者另一个长进程
event.target.value='loading…';
});
})();

将值更改作为回调添加到长时间运行的函数中,并使用
setTimeout
触发重新绘制:

document.addEventListener(“单击”,bttnEx);
功能bttnEx(evt){
常量原点=evt.target;
如果(origin.name==“更新”){
origin.value=“等待…”;
const longRun=()=>sleep(2000,()=>origin.value=“done!”);
返回setTimeout(longRun,1);
}
}
函数睡眠(ms、回调){
const date=date.now();
do{}while(Date.now()-Date

为什么要添加多个
单击按钮元素上的
侦听器?@RahulKumar要演示这个问题,我认为您需要将长时间运行的代码分别异步执行到UI中。我建议调查实现这一目标的常见机制