react中调用antd的Select下拉框位置随页面滚动

博客主要围绕页面滚动时下拉框跟随滚动的问题展开。先给出原代码,接着依据官方文档解释找到解决办法,展示改变后的代码,最终解决了滚动时下拉框被带偏的问题,涉及前端开发相关内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

页面滚动后 下拉框也会跟着滚动

点开样式:
页面滚动后
原代码:
<Select
  mode="multiple"
  showSearch
  optionFilterProp="children"
  style={{ width: 600 }}
  placeholder="请选择"
>
  {this.state.zhikongList.map((item: any, index: any) => {
      return <Option value={item.id}>{item.scoreName}</Option>
  })}
</Select>
解决办法为:
getPopupContainer={triggerNode => (triggerNode.parentElement || document.body)}

官方文档的解释

改变后代码:
<Select
  getPopupContainer={triggerNode => (triggerNode.parentElement || document.body)}//加入这一行
  mode="multiple"
  showSearch
  optionFilterProp="children"
  style={{ width: 600 }}
  placeholder="请选择卡控质检点"
>
  {this.state.zhikongList.map((item: any, index: any) => {
      return <Option value={item.id}>{item.scoreName}</Option>
  })}
</Select>

解决后

滚动不在将下拉框带偏

### 解决 a-select 组件点击空白区域关闭下拉框 在 Ant Design Vue 中,`a-select` 组件默认行为是在点击外部区域时自动收起下拉菜单。如果遇到点击空白处时不关闭的情况,可以通过设置 `dropdownMatchSelectWidth` 和自定义事件处理来实现预期效果。 #### 方法一:通过监听全局点击事件 可以在组件挂载时绑定一个全局点击事件监听器,在检测到点击发生在 `select` 组件之外的情况下手动触发隐藏操作: ```javascript mounted() { window.addEventListener('click', this.handleClickOutside); }, beforeDestroy() { window.removeEventListener('click', this.handleClickOutside); }, methods: { handleClickOutside(event) { const selectElement = document.querySelector('.ant-select-selection'); if (!selectElement.contains(event.target)) { // 手动关闭下拉菜单 this.$refs.mySelect.blur(); } }, } ``` 此方法适用于单个实例控制;对于多个 `select` 实例,则需更精确地判断目标元素并分别管理其状态[^1]。 #### 方法二:利用 `blur()` API 另一种更为简洁的方式是直接调用 `blur()` 函数让输入失去焦点从而达到相同的效果: ```html <a-select ref="mySelect"> <!-- options --> </a-select> <button @click="$refs.mySelect.blur()">Close Dropdown</button> ``` 这种方式简单明了,适合于特定场景下的需求满足[^2]。 #### 注意事项 - 如果使用的是 React 版本的 AntD 库,请注意语法差异以及生命周期钩子的不同名称。 - 对于复杂的应用程序结构,建议采用官方推荐的最佳实践或查阅最新文档获取最合适的解决方案[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值