小程序点击出弹框--搜索框下拉选择框

案例展示 

CSS(根据实际情况进行调整 )

.mask {

  position: fixed;

  top: 0;

  left: 0;

  width: 100%;

  height: 100%;

  background-color: rgba(0, 0, 0, 0.5);

  z-index: 99;

}

.model{

  position: relative;

  width: 100%;

  height: 100%;

  z-index: 9999;

}

.modeltank{

  position: fixed;

  width: 100%;

  bottom: 0;

  text-align: center;

  background-color: #fff;

  border: 1px solid rgb(168, 168, 168);

  border-radius: 20rpx;

}

.fontt{

  height: 240px;

}

.xialak {

  margin-top: 40rpx;

  overflow-y: auto;

  max-height: 200px; /* 设置最大高度以触发垂直滚动条 */

  width: 100%;

  text-align: center;

  padding-left: 35%;

  margin: 0 auto;

}

.row {

  display: flex;

  line-height: 0.9rem;

  text-align: center;

  align-items: center;

  padding: 0 30rpx;

}

.row-extra {

  flex-basis: initial;

  font-size: 32rpx;

  color: #888;

}

HTML

  <view onTap="onModel">

    <text>点击此处出弹框</text>

    <view>

      <input  value="{{selectedName}}"  placeholder="请选择 >"  />

    </view>

  </view>

<!-- 遮罩层 -->

 <view class="mask" style="display: {{isHidden ? 'none' : 'block'}}"></view>

  <!-- 是否显示弹出框 -->

  <view class="model" hidden="{{isHidden}}">

    <view class="modeltank">

      <view class="fontt">

        <!-- 搜索框 -->

          <view>

            <input  onInput="bindNameInput2"  value="{{sousuoyvalue}}" placeholder="下拉选择规格型号"  />

        </view> 

       

        <!-- 显示下拉列表内容 -->

        <view a:if="{{isSearchListShow}}" class="xialak">

          <view a:for="{{matchedNameList}}" a:key="{{item}}" data-item="{{item}}" onTap="bindNameChange">

            <view class="row">

              <view class="row-extra">{{item}}</view>

            </view>

          </view>

        </view>

      </view>

    </view>

  </view>

JS

 page({

  data:{

    names: ['20*30*40', '30*40*50',  '47*34*80', '36*67*66'],   //下拉列表

    isHidden: true,                 //是否显示弹出框

    sousuoyvalue:"",              //在搜索框里输入的内容

    isSearchListShow: true,  //names列表处是否展示

    matchedNameList: [],      //通过filter方法对this.data.names数组进行过滤,筛选出与用户                                                输入的关键字匹配的项,并将结果存储在matchedNameList中。

    selectedName:""             //点击后的赋值

  },

  //点击出弹框出遮罩层

  onModel(e){

    const namesArray = this.data.names;

    this.setData({

      isHidden: !this.data.isHidden,

      matchedNameList: namesArray   // 将names列表数据赋值给matchedNameList

    })

  },

 // 点击下拉列表事件触发了  (直接点击下拉列表进行取值赋值)

  bindNameChange(e) {

    var that = this

    let name = e.currentTarget.dataset.item;   // 通过e.currentTarget.dataset.item获取了用户                                                                            点击的下拉列表中的项的数据,

    var selectedName = name    //把点击的下拉列表中的项的数据赋值给selectedName并显                                                      示到输入框中

      that.setData({

        selectedName: selectedName,

        isHidden: !this.data.isHidden,

      });

      console.log("点击的下拉列表中的项的数据赋值data", selectedName);

  },

  //下拉列表input框里面的值输入改变事件 (搜索后点击下拉列表进行取值赋值)

  bindNameInput2(e) {

    var that = this

    const keyword = e.detail.value.toLowerCase();   //通过e.detail.value获取用户在输入框中        输入的值,并将其转换为小写字母格式(toLowerCase())

    console.log("keyword在搜索框输入的值",keyword);

    const reg = new RegExp(keyword);   // 创建一个正则表达式reg,用于匹配用户输入的关                                                                 键字。 筛选匹配项时,使用的是keyword变量

    console.log("reg",reg);

    const matchedNameList = this.data.names.filter(item => reg.test(item[0].toLowerCase()));  //通过filter方法对this.data.names数组进行过滤,筛选出与用户输入的关键字匹配的项,并将结果存储在matchedNameList中。

    console.log("matchedNameList",matchedNameList);

    this.setData({ matchedNameList });     //使用setData方法将matchedNameList更新到页面数 据中,以便在界面上展示匹配的结果,并打印出匹配的结果。

    that.setData({

      sousuoyvalue: keyword

    })

  },

})

此文章为钉钉小程序 如果需要微信小程序只需要改成微信小程序语法即可 

  • 15
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现带有模糊搜索的下拉选择,可以使用以下步骤: 1. 创建一个输入下拉选择组件,并将它们放置在一起。 2. 给输入绑定一个 "keyup" 事件,当用户输入时,触发模糊搜索功能。 3. 在 "keyup" 事件处理程序中,获取输入的值,并将其与下拉选择中的所有选项进行比较。 4. 如果选项中包含输入的值,则将该选项添加到一个新的数组中。 5. 将新数组中的选项更新到下拉选择中,以显示符合条件的选项。 6. 当用户从下拉选择选择一个选项时,将所选的值更新到输入中。 7. 最后,当用户清空输入时,将下拉选择中的所有选项显示来。 具体实现过程可以参考以下代码: ```html <!-- 输入下拉选择组件 --> <template> <div> <input type="text" v-model="searchText" @keyup="searchOptions" /> <select v-model="selectedOption"> <option v-for="(option, index) in filteredOptions" :key="index" :value="option">{{ option }}</option> </select> </div> </template> <script> export default { data() { return { options: ['apple', 'banana', 'orange', 'pear', 'peach'], // 所有选项 filteredOptions: [], // 模糊搜索后的选项 searchText: '', // 输入的值 selectedOption: '', // 当前选择的选项 }; }, methods: { searchOptions() { // 获取输入的值,并将其转为小写字母 const searchText = this.searchText.toLowerCase(); // 过滤符合条件的选项,并将它们添加到新数组中 this.filteredOptions = this.options.filter(option => option.toLowerCase().includes(searchText)); // 如果输入中的值为空,则显示所有选项 if (!searchText) { this.filteredOptions = this.options; } }, }, }; </script> ``` 上述代码中,我们首先定义了一个包含所有选项的数组 `options`,以及一个空数组 `filteredOptions`。在 `searchOptions` 方法中,我们获取输入的值,并将其转为小写字母,然后通过 `filter` 方法过滤符合条件的选项,并将它们添加到 `filteredOptions` 数组中。最后,我们在模板中使用 `v-for` 指令将 `filteredOptions` 数组中的选项渲染到下拉选择中。同时,我们也将 `selectedOption` 属性绑定到下拉选择上,以便在用户选择一个选项时,将其值更新到输入中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值