微信小程序视图控件与bindtap之间的问题的解决


Posted in Javascript onApril 08, 2019

在微信小程序中 最常用的<view>控件 可以用bindtap(冒泡反应) 如<view bindtap="ItemOnclick" data-mType="123">的形式绑定ItemOnclick事件并传递一个dataset,其包含一个名为mType的元素 值为123。

在某一次设计中

有如下结构:

<view class="func-m" bindtap="ItemOnclick" data-mType="123">
    <image src="{{ROOT_PATH}}/images/icon1.png" />
  </view>

ItemOnclick事件在点击在图片上时不会触发 需要点击在图片之外及外层view范围之内的地方 才会触发

若将bindtap写在<image>标签内 则反过来 点击图片会触发 但点击在图片之外及外层view范围之内的地方不会触发

由此我做出判断

点击事件不会向父级或子级控件传递。

(然而这与冒泡反应的定义是不一致的)

但是最近又碰到下面这种情况:

<view style="background-color:#eee;" bindtap="HideMenuList"><!--此为最外层view-->
  <image src="{{ROOT_PATH}}/images/icon1.png" bindtap="ShowMenuList" />
  <view class="menu-list">
     <view class="menu-item" data-mType="CP" bindtap="MenuItemOnclick">
     </view>
     <view class="menu-item" data-mType="HW" bindtap="MenuItemOnclick">
     </view>
   </view>
</view>

需要实现 点击图片 显示菜单列表 点击每个菜单项 触发MenuItemOnclick事件并传递对应的参数

然后当在<view class="menu-list">标签外的地方点击一下 就触发HideMenuList事件隐藏菜单

而实际产生的效果是 当点击图片时 菜单列表一闪便消失 有时直接没显示
后通过打印log发现是当点击图片触发了ShowMenuList事件后 HideMenuList事件也被触发了(且总在ShowMenuList事件之后)

即点击事件由<image>传递到了外层的<view> 因而触发了HideMenuList事件

这样的话那之前的判断就是错误的

目前还没找到这两种情况之间的关键差异,第二种情况的解决方案是 当显示菜单时 同时创造一个透明遮罩层覆盖除菜单列表外的区域,点击到这个透明遮罩层后触发HideMenuList事件并销毁或隐藏遮罩层

PS:第二种情况的方式 以前在html及Android环境下都有用过 是没有这个问题的,可能微信小程序这方面的底层机制和html及Android不一样,还待深究。

微信小程序bindtap与catchtap的区别详解

参考官方文档 https://developers.weixin.qq.com/miniprogram/dev/framework/view/wxml/event.html

bindtap和catchtap都是当用户点击该组件的时候会在该页面对应的Page中找到相应的事件处理函数。

bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定可以阻止冒泡事件向上冒泡:

//视图层
<view id="outer" bindtap="handleTap1">   //在组件中绑定bindtap事件 函数handleTap1
 outer view
 <view id="middle" catchtap="handleTap2"> //在组件中绑定catchtap事件 函数handleTap2
  middle view
  <view id="inner" bindtap="handleTap3"> //在组件中绑定bindtap事件 函数handleTap3
   inner view
  </view>
 </view>
</view>
//逻辑层
Page({
  handleTap1:function(event){  
  //点击handleTap1输出 outer view bindtap  
   console.log("outer view bindtap") 
  },
  handleTap2: function (event) { 
  //点击handleTap2输出 middle view catchtap
   console.log("middle view catchtap") 
  },
  handleTap3: function (event) { 
  //点击handleTap3输出 inner view bindtap middle view catchtap 
   console.log("inner view bindtap") 
  },

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
从新浪弄下来的全屏广告代码 与使用说明
Mar 15 Javascript
Jquery 设置标题的自动翻转
Oct 03 Javascript
javascript中全局对象的parseInt()方法使用介绍
Dec 19 Javascript
jQuery选择器简明总结(含用法实例,一目了然)
Apr 25 Javascript
jquery动态改变form属性提交表单
Jun 03 Javascript
javascript实现日期格式转换
Dec 16 Javascript
jquery实现树形菜单完整代码
Dec 29 Javascript
JS 实现banner图片轮播效果(鼠标事件)
Aug 04 Javascript
vue+axios实现文件下载及vue中使用axios的实例
Sep 21 Javascript
js使用文档就绪函数动态改变页面内容示例【innerHTML、innerText】
Nov 07 Javascript
关于angular浏览器兼容性问题的解决方案
Jul 26 Javascript
解决vue请求接口第一次成功,第二次失败问题
Sep 08 Javascript
微信小程序实现bindtap等事件传参
Apr 08 #Javascript
详解vue中axios请求的封装
Apr 08 #Javascript
使用taro开发微信小程序遇到的坑总结
Apr 08 #Javascript
vue+element+Java实现批量删除功能
Apr 08 #Javascript
如何为你的JavaScript代码日志着色详解
Apr 08 #Javascript
详解element-ui日期时间选择器的日期格式化问题
Apr 08 #Javascript
小程序获取当前位置加搜索附近热门小区及商区的方法
Apr 08 #Javascript
You might like
IIS下PHP连接数据库提示mysql undefined function mysql_connect()
2010/06/04 PHP
php无限极分类实现的两种解决方法
2013/04/28 PHP
zf框架的session会话周期及次数限制使用示例
2014/03/13 PHP
Laravel中基于Artisan View扩展包创建及删除应用视图文件的方法
2016/10/08 PHP
PHP运行模式汇总
2016/11/06 PHP
利用PHPExcel实现Excel文件的写入和读取
2017/04/26 PHP
PHP判断一个变量是否为整数、正整数的方法示例
2019/09/11 PHP
关于PHP求解三数之和问题详析
2020/11/09 PHP
JavaScript Event学习第八章 事件的顺序
2010/02/07 Javascript
jQuery :nth-child前有无空格的区别分析
2011/07/11 Javascript
jQuery实现form表单reset按钮重置清空表单功能
2012/12/18 Javascript
删除select中所有option选项jquery代码
2013/08/12 Javascript
在页面中js获取光标/鼠标的坐标及光标的像素坐标
2013/11/11 Javascript
鼠标拖拽移动子窗体的JS实现
2014/02/25 Javascript
jQuery之选项卡的简单实现
2014/02/28 Javascript
jquery常用特效方法使用示例
2014/04/25 Javascript
jquery搜索框效果实现方法
2015/01/16 Javascript
基于vue-router 多级路由redirect 重定向的问题
2018/09/03 Javascript
如何自定义微信小程序tabbar上边框的颜色
2019/07/09 Javascript
[52:31]VP vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
使用wxPython获取系统剪贴板中的数据的教程
2015/05/06 Python
基于Django filter中用contains和icontains的区别(详解)
2017/12/12 Python
Python+PyQt5+MySQL实现天气管理系统
2020/06/16 Python
如何使用Pytorch搭建模型
2020/10/26 Python
Python 用__new__方法实现单例的操作
2020/12/11 Python
css3 给页面加个半圆形导航条主要利用旋转和倾斜样式
2014/02/10 HTML / CSS
通信生自我鉴定
2014/01/18 职场文书
大学秋游活动方案
2014/02/11 职场文书
有关环保的标语
2014/06/13 职场文书
服装仓管员岗位职责
2014/06/17 职场文书
五年级小学生评语
2014/12/26 职场文书
2015年派出所工作总结
2015/04/24 职场文书
2015年乡镇妇联工作总结
2015/05/19 职场文书
人与自然的观后感
2015/06/18 职场文书
法人身份证明书
2015/06/18 职场文书
节水宣传标语口号
2015/12/26 职场文书