ESP01 WiFi模块项目:HTML按钮按下/释放事件失效求助
解决ESP01网页按钮按下/释放双响应问题
你的问题出在两个核心点:
onclick事件是鼠标按下后再释放才会触发的,和onmouseup触发时机完全重叠,导致你要的“按下触发”逻辑根本没生效,反而两个事件互相干扰。- 用
location.href跳转页面的话,第一次请求还没完成,第二次跳转就会覆盖它,ESP01大概率只能收到其中一个请求,另一个会被浏览器直接中断。
修正方案如下:
- 用
onmousedown替代onclick处理“按下”动作,这个事件是手指/鼠标按下按钮瞬间就触发的,完全符合你的需求。 - 改用异步请求(比如原生的
fetch)发送指令,而不是跳转页面,这样两次请求都能完整发送到ESP01,页面也不会刷新。
直接用下面的代码替换你原来的按钮:
<button id="upBtn">UP</button> <script> const upBtn = document.getElementById('upBtn'); // 按下按钮时发送UP_ON请求 upBtn.addEventListener('mousedown', () => { fetch('/UP_ON'); }); // 释放按钮时发送UP_OFF请求 upBtn.addEventListener('mouseup', () => { fetch('/UP_OFF'); }); // 额外处理鼠标移出按钮的情况,防止用户按下后移开鼠标没触发释放 upBtn.addEventListener('mouseleave', () => { fetch('/UP_OFF'); }); </script>
如果你的ESP01 Web服务器需要确认请求状态,可以给fetch加个简单的错误处理:
fetch('/UP_ON') .catch(err => console.log('请求发送失败:', err));
内容的提问来源于stack exchange,提问作者Andrea
相关产品推荐
相关产品推荐

