You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP01 WiFi模块项目:HTML按钮按下/释放事件失效求助

解决ESP01网页按钮按下/释放双响应问题

你的问题出在两个核心点:

  • onclick 事件是鼠标按下后再释放才会触发的,和 onmouseup 触发时机完全重叠,导致你要的“按下触发”逻辑根本没生效,反而两个事件互相干扰。
  • 用 location.href 跳转页面的话,第一次请求还没完成,第二次跳转就会覆盖它,ESP01大概率只能收到其中一个请求,另一个会被浏览器直接中断。

修正方案如下:

  1. 用 onmousedown 替代 onclick 处理“按下”动作,这个事件是手指/鼠标按下按钮瞬间就触发的,完全符合你的需求。
  2. 改用异步请求(比如原生的 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 14:25:15