uni-app 飞书小程序 click 触发两次
uni-app 飞书小程序 click 触发两次
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Mac | 12.3.1 | HBuilderX |
HBuilderX | 3.4.7 | |
第三方工具 | 2.13.2 | |
基础库 | 1.9.65.5 |
操作步骤:
<button [@click](/user/click)="log">log</button>
function log(){
console.log("click")
}
点击button
预期结果:
输出一次 click
实际结果:
输出两次 click
bug描述:
使用 @click 点击 会触发两次方法
更多关于uni-app 飞书小程序 click 触发两次的实战教程也可以访问 https://www.itying.com/category-93-b0.html
3 回复
已上传视频附件,麻烦查看一下
在开发 uni-app 飞书小程序时,如果遇到 click
事件触发两次的问题,可能是由于以下原因之一导致的。以下是一些常见的排查和解决方法:
1. 事件冒泡
- 原因:如果事件绑定在父元素和子元素上,点击子元素时,事件会冒泡到父元素,导致父元素的事件也被触发。
- 解决方法:
- 使用
[@click](/user/click).stop
阻止事件冒泡。
<view [@click](/user/click)="handleParentClick"> <view [@click](/user/click).stop="handleChildClick">子元素</view> </view>
- 使用
2. 重复绑定事件
- 原因:可能在代码中多次绑定了同一个事件,导致事件被触发多次。
- 解决方法:
- 检查代码,确保事件只绑定一次。
- 如果是动态绑定的,确保在绑定前先解绑。
3. 飞书小程序的兼容性问题
- 原因:飞书小程序的某些版本可能存在兼容性问题,导致事件触发异常。
- 解决方法:
- 更新飞书小程序开发工具和 SDK 到最新版本。
- 检查飞书小程序的官方文档,查看是否有已知问题。
4. 异步操作导致的问题
- 原因:如果事件处理函数中有异步操作(如网络请求),可能会导致事件被多次触发。
- 解决方法:
- 在事件处理函数中添加防抖(debounce)或节流(throttle)逻辑。
let isClicking = false; function handleClick() { if (isClicking) return; isClicking = true; // 执行操作 setTimeout(() => { isClicking = false; }, 1000); // 1秒内只允许触发一次 }
5. 组件库的默认行为
- 原因:某些 UI 组件库(如
uView
)可能会默认绑定事件,导致事件被触发多次。 - 解决方法:
- 检查使用的组件库文档,确认是否有默认事件绑定。
- 如果需要,手动解绑或覆盖默认行为。
6. 调试工具的问题
- 原因:开发工具(如飞书小程序开发者工具)可能存在 bug,导致事件触发异常。
- 解决方法:
- 尝试在真机上测试,确认是否是工具的问题。
- 重启开发工具或清除缓存。
7. 代码逻辑问题
- 原因:代码中可能存在逻辑错误,导致事件被多次触发。
- 解决方法:
- 仔细检查事件绑定的代码,确保逻辑正确。
- 使用
console.log
或断点调试,确认事件触发的次数和时机。
示例代码
以下是一个防止事件触发两次的示例:
<template>
<view [@click](/user/click)="handleClick">点击我</view>
</template>
<script>
export default {
methods: {
handleClick() {
if (this.isClicking) return;
this.isClicking = true;
console.log("点击事件触发");
// 执行操作
setTimeout(() => {
this.isClicking = false;
}, 1000); // 1秒内只允许触发一次
},
},
data() {
return {
isClicking: false,
};
},
};
</script>