首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在单击isClearable图标时停止打开react-select input下拉菜单(仅限移动设备)?

如何在单击isClearable图标时停止打开react-select input下拉菜单(仅限移动设备)?
EN

Stack Overflow用户
提问于 2020-04-28 12:54:35
回答 4查看 2.4K关注 0票数 1

我制作了这个非常简单的codesandbox来显示我的问题。

当我点击在将isClearable添加到选择组件后出现的'x‘图标时,它既清除了选择,又打开了下拉列表。我不想打开下拉菜单,但我不知道如何停止它。有什么想法吗?

这个问题只存在于手机浏览器上。clear函数在桌面浏览器上的工作方式与预期一致。要在移动设备上查看codesandbox,请打开Chrome devtools并单击“切换设备工具栏”按钮。

编辑:由于我还没有收到回复(22小时),这里有更多的细节。This discussion与我的问题最为相似。他们讨论了原因可能是由于react-tap-event-plugin。

我试过使用react-fastclick包,因为我认为这可能是一个延迟的点击(在手机中长按不能打开菜单)。

我尝试使用onClick={e => { e.preventDefault(); e.stopPropagation(); }}属性在Select组件周围添加一个div

我尝试添加一个虚拟div,并在Select组件中的onChange事件结束时调用document.getElementById("dummy").focus()

编辑2:如果您为touchend事件添加了一个事件断点,单击导致脚本暂停的'x‘,然后按F8 (恢复脚本),菜单将不会打开。一定有某种延迟的窃听发生了。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-04-30 02:44:16

我有一个老生常谈的解决方案。在Select组件的onChange事件函数属性的末尾,我在css中设置了50毫秒的pointer-events: null。如果有人知道一种不那么老套的方法,请让我知道!

代码语言:javascript
运行
复制
temporarilyDisable = () => {
  const elementToDisable = document.getElementById('selectComponentID');
  const wait = ms => new Promise((r, j)=>setTimeout(r, ms))
  elementToDisable.setAttribute("style", "pointer-events: none")
  let prom = wait(50).then(() => elementToDisable.setAttribute("style", "pointer-events: all"))
}
票数 1
EN

Stack Overflow用户

发布于 2020-12-22 21:31:23

尝试将此属性添加到Select组件:

代码语言:javascript
运行
复制
openMenuOnClick={false} 

对我有效,希望对你也有效。

票数 1
EN

Stack Overflow用户

发布于 2020-04-29 11:18:23

检查this

仍然不能很好地工作,至少它会给你提示如何修改默认行为。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61472882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档