微信小程序输入框---模糊搜索

html 复制代码
	<view class="starTime" style="margin: 40rpx 0;">
	  <text style="	width:160rpx;" >车牌号码:</text>
	 <view class="section" style="display: flex;align-items: center; position: relative;">
	   <input 
	     type="text" 
	     style="margin-left: 40rpx;font-size: 33rpx;"
	     class="weui-search-bar__input flex1 mar-l" 
	     placeholder="请输入车牌号码" 
	     value="{{inputVal}}" 
	     bindinput="inputTyping" 
	     bindfocus="showDropdown"
	     bindblur="hideDropdown"
	   />
	   
	   <!-- 下拉选择框 -->
	   <view class="dropdown" wx:if="{{showDropdown && carList.length > 0}}">
	     <view class="dropdown-item" wx:for="{{carList}}" wx:key="index" bindtap="selectCar"   data-label="{{item.label}}" data-plateber="{{item.plateNumber}}">
	       {{item.label}} <!-- 假设车牌字段是licensePlate,根据实际接口调整 -->
	     </view>
	   </view>
	 </view>
	 <image  class="module-icon" src="https:el.png"   bindtap="clearInput"></image>
	  </view>

css

html 复制代码
Page({
  data: {
    inputVal: '',
    carList: [], // 存储车牌列表
    showDropdown: false, // 控制下拉框显示
    routeId: '', // 假设已有此数据
    timer: null // 防抖计时器
  },

  // 输入事件处理
  inputTyping(e) {
    const value = e.detail.value
    this.setData({
      inputVal: value
    })

    // 防抖处理:输入停止300ms后再调用接口
    if (this.data.timer) {
      clearTimeout(this.data.timer)
    }
    this.data.timer = setTimeout(() => {
      if (value.trim()) { // 有输入内容才调用接口
        this.getQueryVehicleList4shift()
      } else {
        // 清空输入时清空列表
        this.setData({
          carList: []
        })
      }
    }, 300)
  },

  // 显示下拉框
  showDropdown() {
    if (this.data.carList.length > 0) {
      this.setData({
        showDropdown: true
      })
    }
  },

  // 隐藏下拉框(延迟执行,避免选择时立即隐藏)
  hideDropdown() {
    setTimeout(() => {
      this.setData({
        showDropdown: false
      })
    }, 200)
  },

  // 选择车牌
  selectCar(e) {
    const selected = e.currentTarget.dataset.item
    this.setData({
      inputVal: selected.licensePlate, // 显示选中的车牌
      showDropdown: false // 选中后隐藏下拉框
    })
    // 可以在这里添加选择后的其他逻辑
  },

  // 调用模糊搜索接口
  getQueryVehicleList4shift() {
    requestApi.get('system/vehicle/queryVehicleList4shift', {
      fleetId: wx.getStorageSync('information').fleetId,
      routeId: this.data.routeId,
      sf: this.data.inputVal // 搜索关键词
    }).then(res => {
      let carList = res.data || []
      console.log('车牌列表:', carList)
      this.setData({
        carList: carList,
        showDropdown: carList.length > 0 // 有数据时显示下拉框
      })
    }).catch(err => {
      console.error('接口调用失败:', err)
      this.setData({
        carList: []
      })
    })
  }
})
javascript 复制代码
Page({
  data: {
    inputVal: '',
    carList: [], // 存储车牌列表
    showDropdown: false, // 控制下拉框显示
    routeId: '', // 假设已有此数据
    timer: null // 防抖计时器
  },

  // 输入事件处理
  inputTyping(e) {
    const value = e.detail.value
    this.setData({
      inputVal: value
    })

    // 防抖处理:输入停止300ms后再调用接口
    if (this.data.timer) {
      clearTimeout(this.data.timer)
    }
    this.data.timer = setTimeout(() => {
      if (value.trim()) { // 有输入内容才调用接口
        this.getQueryVehicleList4shift()
      } else {
        // 清空输入时清空列表
        this.setData({
          carList: []
        })
      }
    }, 300)
  },

  // 显示下拉框
  showDropdown() {
    if (this.data.carList.length > 0) {
      this.setData({
        showDropdown: true
      })
    }
  },

  // 隐藏下拉框(延迟执行,避免选择时立即隐藏)
  hideDropdown() {
    setTimeout(() => {
      this.setData({
        showDropdown: false
      })
    }, 200)
  },

  // 选择车牌
  selectCar(e) {
    const selected = e.currentTarget.dataset.item
    this.setData({
      inputVal: selected.licensePlate, // 显示选中的车牌
      showDropdown: false // 选中后隐藏下拉框
    })
    // 可以在这里添加选择后的其他逻辑
  },

  // 调用模糊搜索接口
  getQueryVehicleList4shift() {
    requestApi.get('syst4/shift', {
      fleetId: wx.getStorageSync('information').fleetId,
      routeId: this.data.routeId,
      sf: this.data.inputVal // 搜索关键词
    }).then(res => {
      let carList = res.data || []
      console.log('车牌列表:', carList)
      this.setData({
        carList: carList,
        showDropdown: carList.length > 0 // 有数据时显示下拉框
      })
    }).catch(err => {
      console.error('接口调用失败:', err)
      this.setData({
        carList: []
      })
    })
  }
})
相关推荐
独角鲸网络安全实验室6 小时前
2026微信小程序抓包全解析:从实操落地到合规风控,解锁前端调试新范式
前端·微信小程序·小程序·抓包·系统代理绕过·https证书严格校验·进程隔离
fix一个write十个11 小时前
【uniApp开发】微信小程序 web-view 内嵌 H5 跳转支付踩坑实录
微信小程序·uni-app
互联科技报20 小时前
2026小程序店铺装修模板怎么选?小程序店铺装修教程是什么?
小程序
凡科网小帆20 小时前
右以云小程序:零基础企业的高性价比数字化落地实录
小程序
棋宣21 小时前
微信小程序onShareAppMessage 分享-生命周期函数 在vue3中 组合式函数 hooks中不生效
微信小程序·小程序
2601_9579665321 小时前
抽卡机盲盒小程序怎么做?完整功能搭建与开发要点
小程序
好赞科技1 天前
深度测评2026年精选美发预约小程序排行榜 革新预约新体验 修订
大数据·微信小程序
一颗无敌码农2 天前
多商户与多门店电商系统有什么区别?核心模式解析
微信小程序·php·用户运营·crmeb
wuyoula2 天前
全新多平台电商代付商城源码
开发语言·c++·ui·小程序·php源码
低代码布道师2 天前
微搭低代码MBA 培训管理系统实战 36——小程序端课程预约功能实现
低代码·小程序