1 效果

先来看一下效果

2 设计思路

2.1 显示效果的设计

本示例包含两种不同的搜索框,第一种搜索框是在最初状态下显示的搜索框,它由一个输入框input和一个表示“搜索”的图片组成。

第二种搜索框是开始输入时的搜索框,它由一个输入框input和一个表示“取消”的图片组成。

我们可以设置一个标志位focus来表示输入框是否获得了焦点,用于两种形式的搜索框的切换。初始状态下focus=false,于是显示第一种搜索框。当我们在初始状态下点击搜索框时,会触发获得焦点事件,我们可以在输入框的属性中添加bindfocus,为其绑定一个事件处理函数。在事件处理函数中把focus设置为true,就切换到第二种输入框来显示。

在切换到第二种输入框时,把我们所有的数据都放在一个scroll-view中显示。当输入内容时,触发输入事件,为输入框添加bindinput属性,在事件处理函数中查询是否有数据项与输入的内容匹配。如果有,则只显示匹配的数据项。

当点击搜索框右边的图片“取消”时,图片的bindtap属性则会调用相应的函数,在这个函数里,我们把focus设置为false,这样就会切换回第一种输入框的状态,我们也可以利用focus这个标志位来控制scroll-view是否显示,都是用到wx:if=“{{focus}}”。

2.2 文本搜索的实现

如果我们的数据并不是很多,那么就可以存放在页面的js文件中的data里。利用以下方法可以查找是否有数据项与输入的内容匹配:
data里定义两个数组:

 list: [{'name':'连花清瘟胶囊','num':'1盒'},{'name':'感冒灵颗粒','num':'1盒'},{'name':'维生素C','num':'2瓶'},{'name':'蒲地蓝消炎片','num':'3盒'}],   //这是搜索到的结果list2: [{'name':'连花清瘟胶囊','num':'1盒'},{'name':'感冒灵颗粒','num':'1盒'},{'name':'维生素C','num':'2瓶'},{'name':'蒲地蓝消炎片','num':'3盒'}],    //这是所有可供查询的记录

在js中的查询函数:

     var list = this.data.list2;        //先把所有数据项保存var list2 = [];     //定义一个数组//循环取每个数据项的主键,即药品名namefor(var i=0;i<list.length;i++){var string = list[i].name;//查询name是否包含输入框内输入的关键词,如果有就把该数据项装进list2数组if(string.indexOf(e.detail.value) >= 0){list2.push(list[i]);}}//到这里list2就是与搜索结果匹配的数据项了//如果输入的关键词为空就加载原来的全部数据,不是空就加载搜索到的数据if(e.detail.value == ""){//加载全部this.setData({list: list})} else {this.setData({list: list2})}

3 附代码

wxml:

<!-- 一般情况下的搜索框显示 -->
<view wx:if="{{!focus}}" class='search'><image class="search_image" src='/icon/search.png'></image><input type='text' placeholder='搜索药品' placeholder-class="center" confirm-type='search' bindfocus="focusHandler"></input>
</view>
<!-- 获得焦点时的搜索框,多一个取消按钮 -->
<view wx:if="{{focus}}" class='search'><input class="search_input" type='text' placeholder='搜索药品' confirm-type='search' value="{{inputValue}}"  bindinput='query'></input><image class="search_image" src='/icon/cancel.png' bindtap='cancelHandler'></image>
</view><!-- 搜索结果显示框 --><scroll-view wx:if="{{focus}}" class="scrollview" scroll-y="true"><view wx:for="{{list}}" wx:key="name"><view class="scrollItem"><text class="font1" space="nbsp">   {{item.name}}</text><text class="font2"space="nbsp">{{item.num}}   </text></view></view></scroll-view>

js:

Page({/*** 页面的初始数据*/data: {list: [{'name':'连花清瘟胶囊','num':'1盒'},{'name':'感冒灵颗粒','num':'1盒'},{'name':'维生素C','num':'2瓶'},{'name':'蒲地蓝消炎片','num':'3盒'}], //这是搜索到的结果list2: [{'name':'连花清瘟胶囊','num':'1盒'},{'name':'感冒灵颗粒','num':'1盒'},{'name':'维生素C','num':'2瓶'},{'name':'蒲地蓝消炎片','num':'3盒'}],    //这是所有可供查询的记录focus:false,  //控制是否显示带取消按钮的搜索框inputValue:""},focusHandler(e){this.setData({focus:true});},cancelHandler(e){this.setData({focus:false});},query(e){this.setData({inputValue: e.detail.value})  //首先回显输入的字符串//实现搜索的功能var list = this.data.list2;     //先把第二条json存起来var list2 = [];      //定义一个数组//循环去取数据for(var i=0;i<list.length;i++){var string = list[i].name;//查询json里的name是否包含搜索的关键词,如果有就把他装进list2数组if(string.indexOf(e.detail.value) >= 0){list2.push(list[i]);}}//到这里list2就已经是你查出的数据//如果输入的关键词为空就加载原来的全部数据,不是空就加载搜索到的数据if(e.detail.value == ""){//加载全部this.setData({list: list})} else {this.setData({list: list2})}},

代码下载:包含wxml、wxss、js文件
点击下载

微信小程序搜索框以及简单的页面内容搜索的实现相关推荐

  1. 微信小程序弹框禁止下面的页面滚动

    一句话搞定: catchtouchmove="true" <view class="mark" wx:if='{{show}}' catchtouchmo ...

  2. 微信小程序自定义底部导航栏遮挡页面内容(已解决)

    今天也是努力写毕设的一天~ 这几天在实现旅行日记的笔记详情界面,先实现了自定义的底部导航栏,在这里我使用的是iView Weapp,具体的介绍我放在这里了~ 快速上手 iView Weapp 跟着里面 ...

  3. 微信小程序提示框提示

    微信小程序提示框很常见,有的项目弹出提示选择关闭的时候需要不再弹出,清理缓存的时候才弹出. var s = wx.getStorageSync('sh')if (s == '') {// s= tru ...

  4. php阅读器开发,微信小程序阅读器的简单实例开发

    这篇文章主要介绍微信小程序阅读器的简单实例开发的相关资料,需要的朋友可以参考下 今天和朋友聊天说到小程序,然后看在看书,然后我们就弄了个小读书的demo,然后现在分享一下. 一.先来上图: 首先先说下 ...

  5. 微信小程序选择框问题 小程序picker点击显示object range-key=这里写要显示的字段

    微信小程序选择框问题 小程序picker点击显示object range-key="这里写要显示的字段" <picker bindchange="bindClass ...

  6. 小程序源码:仿各大APP种树微信小程序源码下载-简单快速上手

    这是一款仿各大APP的种树获取水果的一款微信小程序 可以对树浇水,杀虫,修剪等等 另外还有夺宝,更多小程序推荐 支持流量主模式等等 可以进行邀请好友加快树木的成长速度 小程序源码下载地址: 小程序源码 ...

  7. 开发微信小程序,就是这么简单!可自动生成微信小程序源代码,配套JS SDK、接口和后台

    开发微信小程序,就是这么简单!自己动手,丰衣足食! 开发微信小程序有多简单?
 你只需要掌握前端开发,就可以轻松开发自己的微信小程序,实现自己的业务功能.借助果创云,无须域名.无须服务器.无须数据库, ...

  8. APP种树微信小程序源码下载-简单快速上手

    这是一款种树获取水果的一款微信小程序 可以对树浇水,杀虫,修剪等等 另外还有夺宝,更多小程序推荐 可以进行邀请好友加快树木的成长速度 下面是小编的演示图: 小程序源码下载地址:(已更新)APP种树微信 ...

  9. 微信小程序input框中加入小图标的实现方法

    最近入坑小程序,要求在小程序的输入框中展示一个小图标,页面如下: 然后按照,html页面中的做法,在input框中添加了background-image属性,出乎意料的事,小程序报了下边这样一个错误: ...

最新文章

  1. 嵌入式linux alsa,嵌入式Linux下ALSA音频架构ALSA-lib移植与编译心得
  2. 心得丨吴恩达Deeplearning.ai 全部课程学习心得分享
  3. 问题解决: 解释器错误: 没有那个文件或目录
  4. linux 命令-- touch
  5. nyoj--79--导弹拦截(动态规划)
  6. 在python中创建列表的最佳和/或最快方法
  7. ios apns netty java codec 防止粘包
  8. ogg启动报错libnnz11.so: cannot open shared object file
  9. 在Windows环境下为Python 2.5安装SSL模块
  10. CSS标签选择器(二)
  11. (转)通过 Javacore 诊断线程挂起等性能问题
  12. Boostrap Table学习笔记
  13. 2020软件测试学科全套上课视频教程网盘免费分享
  14. 卡尔曼滤波原理图文详解
  15. 原则与思维模型--《思维模型》2
  16. C++ 几个特殊符号
  17. R 回归分析 多元线性回归
  18. QCon旧金山2016大会,议题发布及研讨会一瞥
  19. image-conversion 图片压缩,vue
  20. 高一凡-数据结构第2章-线性表

热门文章

  1. 《MongoDB权威指南》读书笔记 —— Part Ⅱ:设计应用(2)
  2. 造车不是打群架,有没有“势力”不重要,有“实力”才是关键
  3. 浅谈电气火灾监控系统在大学公寓中的应用
  4. java壁虎_壁虎JavaSE
  5. Win10直接关机后打开文件夹卡,无法显示硬盘
  6. C语言的历史和常见的标准
  7. Java (高级)软件工程师面试考纲
  8. 用友t6服务器设置映射,能否自定义用友T6 ERP-接口字段映射设置?
  9. 我们要做个有想法的员工,但是不能瞎想。
  10. MT6755 平台手机皮套驱动实现