案例展示 

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

    })

  },

})

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

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐