javascript - 手动关闭 AntD 菜单
问题描述
我在其中实现了一个表格,antd
并且在每一行中都有一个下拉菜单,当单击一个菜单项时,会出现一个模式。另外,我也使用onRow
了单击表格行。因此,为了防止在单击我在菜单项单击时使用stopPropagation
的菜单项时触发 onRow 单击触发。一切正常,但问题是因为我stopPropagation
在菜单项点击上使用过,当模式出现时,下拉菜单没有关闭。只有当我点击它关闭的某个地方时。我该如何解决这个问题?
我的列与下拉
{
title: "",
key: "operation",
fixed: "right",
width: 40,
className: "action-button",
render: (value: any, row: any, index: any) => {
return (
<Dropdown
overlay={menu}
trigger={["click"]}
>
<FontAwesomeIcon
icon={faEllipsisV}
/>
</Dropdown>
);
},
},
菜单组件
const menu = (
<Menu style={{ width: 100 }}>
<Menu.Item key="0" style={{ padding: 0 }}>
<span
css={css`
width: 100%;
height: 100%;
display: block;
padding: 5px;
`}
onClick={(event) => showUpdateModal(event)}
>
Update
</span>
)}
</Menu>
);
function showUpdateModal(event: any) {
event.stopPropagation();
setUpdateModalVisibility(true);
}
表组件
<Table
className="your-table"
size="small"
scroll={{
x: 1200,
}}
{...tableProps}
onRow={(record, rowIndex) => {
return {
onClick: (event) => {
var selection = window.getSelection();
if (selection && selection.type != "Range") {
history.push(
`/buy/${record.vehicleYear}-${record.make
.split(" ")
.join("-")}-${record.model.split(" ").join("-")}/${
record.itemId
}/1`
);
}
}, // click row
};
}}
rowClassName="table-row"
dataSource={sellerActivityData}
columns={columns}
/>
我尝试将焦点放在我的模态中的输入字段上,但它没有解决问题。
解决方案
以下是您可以尝试的事情:
在您的列下拉渲染中,尝试放置
e.stopPropagation()
您的FontAwesomeIcon
组件或对其进行测试,将其更改为<button>
first。如果不放它可能会触发表格行点击事件。<FontAwesomeIcon icon={faEllipsisV} onClick={(e) => e.stopPropagation()} />
与其把
onClick
事件放在上面span
,不如试着把它放在上面Menu
<Menu style={{ width: 100 }} onClick={({ key, domEvent }) => showUpdateModal(domEvent)} > <Menu.Item key="0" style={{ padding: 0 }}> <span css={css` width: 100%; height: 100%; display: block; padding: 5px; `} > Update </span> </Menu.Item> </Menu>;
这是我在 javascript 和 antd v4.x 上制作的工作示例:
推荐阅读
- angular - 使用 ViewChild 的 Angular 6
- python - 如何切换到 iFrame,在 Selenium 中不起作用
- java - 在在线申请中使用 Java 执行器服务
- android - Android Studio Kotlin 多次传递意图和全局数组?
- c# - 为什么该方法在没有调用脚本标签的情况下运行?
- javascript - 从 ReactJS 中的状态对象中删除以前的事件
- node.js - 在 MERN 应用程序中,如果您的服务器上有 app.get('/') 和
在您的客户端上,哪个将首先触发或优先? - c - 通过 Shaker 排序对数组的主对角线进行排序
- ios - Delphi/ios:如何在我的 iOS 应用程序中包含动态库?
- sql - SQL Server:当另一列中的另一个数字> 1时,如何使用该列中的值更新列