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

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: []
      })
    })
  }
})
相关推荐
weixin_493503675 小时前
商会小程序附件上传:分片上传 + OSS 直传完整实现(Vue3 + 阿里云 OSS 实战)
阿里云·小程序·云计算
优度网6 小时前
微信小程序主体变更公证书线上办理流程与业务交接风险规避方法浅析(2026)
小程序
ynchyong8 小时前
微信小程序启动顺序遇到的一个坑
前端·微信小程序
m0_587383008 小时前
外卖CPS系统开发实战:从架构设计到运营落地全指南
java·spring·小程序·架构·需求分析
T011561815 小时前
全栈项目实战手记|艺培场馆课时预约小程序 PC 管理端 Demo 完整开发成果展示
小程序
凡泰AI15 小时前
如何为政务 APP 搭建开放平台,实现多部门、第三方供应商标准化入驻与统一管理
android·大数据·小程序·uni-app·app·政务
AI工具人PM产品经理15 小时前
PIL 脚本批量生成小程序图标实战:零美工做出全套 tabBar
微信小程序·canvas·pil·python3.11·工具脚本
FX1317887KP_15 小时前
AI陪练正在重塑KET PET FCE口语备考,传统外教课还有必要吗?
人工智能·小程序·ket口语·pet口语·fce备考·剑桥英语
拖孩16 小时前
一个人 + AI 做的小程序,一个月赚了 36 块
前端·后端·微信小程序
lhldsg16 小时前
从零构建智慧场馆解决方案小程序:开发全流程实战
java·前端·小程序