当前位置: 首页 > 知识库问答 >
问题:

前端 - antd3.x Select组件dropdownRender阻止事件默认行为未生效?

欧阳睿范
2023-09-28

问题描述

如题 我在下拉框里加了一个分页组件并且按照官网给出的阻止下拉框自动关闭加了e.preventDefault(),但是这个只生效在点击页码上对于选择10条/页,20/页这个弹出层还是无法控制,当选择10/页就会自动关闭下拉框。不知道问题出在哪里求大佬执教

问题出现的环境背景及自己尝试过哪些方法

相关代码

粘贴代码文本(请勿用截图)

<Select        style={{ width: 240 }}        placeholder="custom dropdown render"        dropdownRender={(menu) => (          <div>            {menu}            <Divider style={{ margin: "4px 0" }} />            <div              style={{ padding: "4px 8px", cursor: "pointer" }}              onMouseDown={(e) => e.preventDefault()}            >              <Pagination showSizeChanger />            </div>          </div>        )}      >        {items.map((item) => (          <Option key={item}>{item}</Option>        ))}      </Select>

你期待的结果是什么?实际看到的错误信息又是什么?

期待看到的结果是分页器上面的所有操作都可以避免select下拉框自动关闭,实际错误信息是点击切换页码条数的时候下拉框还是会关闭

共有1个答案

孟英叡
2023-09-28

看起来你正在使用 Ant Design 的 Select 组件,并且你遇到了一个问题,即在 dropdownRender 函数中添加的鼠标点击事件并没有阻止下拉框的自动关闭。

问题出在你的 onMouseDown 事件上。虽然你调用了 e.preventDefault(),但是在 Ant Design 的 Select 组件中,当你点击下拉框之外的区域时,这个事件并不被阻止。这是因为 Ant Design 的 Select 组件内部处理了点击事件,以实现下拉框的关闭功能。

要解决这个问题,你需要找到一个方法来阻止 Select 组件内部的点击事件处理。一种可能的解决方案是使用 CSS 来更改 Select 组件的样式,使其在分页器被渲染出来时不响应点击事件。你可以试试下面的代码:

<Select  style={{ width: 240 }}  placeholder="custom dropdown render"  dropdownRender={(menu) => (    <div>      {menu}      <Divider style={{ margin: "4px 0" }} />      <div        style={{          padding: "4px 8px",          cursor: "pointer",          pointerEvents: "none",  // 这一行将阻止所有鼠标事件        }}      >        <Pagination showSizeChanger />      </div>    </div>  )}>  {items.map((item) => (    <Option key={item}>{item}</Option>  ))}</Select>

注意这里我们使用了 pointer-events: none; CSS 属性,这将阻止在这个元素上所有的鼠标事件,包括点击事件。这样,当用户点击分页器时,Select 组件将不会接收到这个事件,因此下拉框不会关闭。

请注意,使用 pointer-events: none; 会导致这个元素不再接收任何鼠标事件,这可能会影响到分页器的其他功能(例如,用户无法通过点击箭头来改变每页的项目数量)。因此,你需要确保这是你希望的行为。如果你需要在用户点击分页器时执行一些其他操作,那么你可能需要寻找一个不同的解决方案。

 类似资料:
  • 本文向大家介绍js阻止冒泡和默认事件(默认行为)详解,包括了js阻止冒泡和默认事件(默认行为)详解的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了js阻止冒泡和默认事件方法,供大家参考,具体内容如下 阻止冒泡。冒泡简单的举例来说,儿子知道了一个秘密消息,它告诉了爸爸,爸爸知道了又告诉了爷爷,一级级传递从而引起事件的混乱,而阻止冒泡就是不让儿子告诉爸爸,爸爸自然不会告诉爷爷了。下面的d

  • 本文向大家介绍在React中怎么阻止事件的默认行为?相关面试题,主要包含被问及在React中怎么阻止事件的默认行为?时的应答技巧和注意事项,需要的朋友参考一下 event.preventDefault();阻止浏览器默认行为, 例如标签不跳转 event.stopPropagation();阻止冒泡; 例如上级点击事件不生效

  • 问题内容: 在通过单击发送按钮或在一段代码的消息文本字段中按Enter的方法中,我有以下代码。 最后的代码使文本区域空白。但是,通过按Enter键发送消息后,文本框将包含换行符,而不是为空。 我的猜测是,在事件处理程序运行之后,然后添加了换行符。如何停止添加换行符? 问题答案: 致电后尝试添加

  • 本文向大家介绍js事件冒泡、事件捕获和阻止默认事件详解,包括了js事件冒泡、事件捕获和阻止默认事件详解的使用技巧和注意事项,需要的朋友参考一下 谈起JavaScript的 事件,事件冒泡、事件捕获、阻止默认事件这三个话题,无论是面试还是在平时的工作中,都很难避免。 1.事件冒泡 先来看一段代码: html代码 你的本意是触发button这个元素,却连同父元素绑定的事件一同触发。这就是事件冒泡。 如

  • 问题内容: 阻塞VM的整体性能更好,因为同步,线程生成和恢复等待值的阻塞客户端都不会浪费时间。因此,如果您愿意不时接受更高的延迟,则阻塞VM是一个不错的选择。尤其是如果交换很少发生并且大多数经常访问的数据恰好适合您的内存。 这是Redis的默认模式(这是唯一的前进模式,我相信现在2.6中已弃用VM),让OS处理分页(如果需要)。我的理解是正确的,启动/启动将需要一些时间才能变得“热”。当在具有16

  • 本文向大家介绍阻止事件的默认行为有哪些?说说它们之间的区别是什么?相关面试题,主要包含被问及阻止事件的默认行为有哪些?说说它们之间的区别是什么?时的应答技巧和注意事项,需要的朋友参考一下 事件冒泡和事件捕获。 事件冒泡:事件按照从最精确的目标对象到最不特定的事件目标的顺序触发。 事件捕获:事件从最不精确的对象开始触发,然后到最精确的目标对象。