uni-app 4.29 编译小程序 点击事件无效

发布于 1周前 作者 wuwangju 来自 Uni-App

uni-app 4.29 编译小程序 点击事件无效

项目信息 详情
产品分类 uniapp/小程序/微信
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 11
HBuilderX类型 正式
HBuilderX版本号 4.29
第三方开发者工具版本号 1.06.2407120
基础库版本号 3.6.3
项目创建方式 HBuilderX

示例代码:

<button class="save" :class="{'saveBorder':compareRawData}" :disabled="compareRawData" @click="maskClick">保存</button>
const Save = () => {
console.log('handleSave=========');
}

操作步骤:

<button class="save" :class="{'saveBorder':compareRawData}" :disabled="compareRawData" @click="maskClick">保存</button>
const Save = () => {
console.log('handleSave=========');
}

预期结果:

点击打印出现handleSave=========

实际结果:

没有反应

bug描述:

编译成微信小程序后 button 点击事件无效,

<button class="save" :class="{'saveBorder':compareRawData}" :disabled="compareRawData" @click="maskClick">保存</button>
const Save = () => {
console.log('handleSave=========');
};

5 回复

你好,看你给出的代码,你的 button 上绑定的事件不是maskClick,而你的函数名是 save,两个名称不同,当然不会触发点击事件


找到原因是 vite.config.js 配置了 build: { minify: ‘terser’, terserOptions: { compress: { drop_console: true, }, }, }, 所以不行

你要不要看看你点击事件和你打印事件的函数的名称是不是一致的呢?

找到原因是 vite.config.js 配置了 build: { minify: ‘terser’, terserOptions: { compress: { drop_console: true, }, }, }, 所以不行

在uni-app 4.29版本中遇到小程序点击事件无效的问题,通常可能是由于事件绑定不正确、组件层级问题、或者样式导致的点击区域不可见等问题。以下是一些常见的排查和修复方法,主要通过代码示例来展示如何正确绑定点击事件。

1. 确认事件绑定正确

首先,确保你的点击事件已经正确绑定到组件上。以下是一个简单的按钮点击事件示例:

<template>
  <view>
    <button @click="handleClick">点击我</button>
  </view>
</template>

<script>
export default {
  methods: {
    handleClick() {
      uni.showToast({
        title: '按钮被点击了',
        icon: 'success'
      });
    }
  }
}
</script>

2. 检查组件层级

如果点击事件绑定正确但仍然无效,检查是否有其他组件覆盖了目标组件,导致点击事件没有被触发。例如,一个透明的view覆盖在按钮之上:

<template>
  <view>
    <button @click="handleClick">点击我</button>
    <!-- 这个view可能会覆盖上面的button -->
    <view style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(255,255,255,0);"></view>
  </view>
</template>

确保没有不必要的覆盖层。

3. 检查样式

有时候,组件可能因为样式设置(如display: none;visibility: hidden;)导致不可见或不可交互。确保目标组件是可见的:

<template>
  <view>
    <button @click="handleClick" style="display: block;">点击我</button>
    <!-- 确保没有其他样式隐藏了这个按钮 -->
  </view>
</template>

4. 使用catch事件

在小程序中,可以使用catch事件来阻止事件冒泡,确保事件只在当前组件触发。如果使用了catch事件但仍然无效,可能需要检查父组件是否有相应的事件处理逻辑干扰:

<template>
  <view>
    <button @catchclick="handleClick">点击我(阻止冒泡)</button>
  </view>
</template>

总结

如果以上方法仍然无法解决问题,建议检查控制台是否有相关错误提示,或者尝试在开发者社区搜索是否有其他开发者遇到并解决了类似问题。确保uni-app和依赖库都是最新版本,有时候问题可能由框架的bug引起,而这些bug在新版本中可能已经被修复。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!