Antd 于document绑定click事件,如何阻止其对Select组件的(冒泡)影响?

发布于 2022-09-06 01:43:13 字数 1137 浏览 12 评论 0

如题,我的操作流程如下:

1、点击编辑按钮,切换界面,点击select组件触发onFocus事件。

clipboard.png

clipboard.png

2、点一下document,便失去焦点了

clipboard.png

而实际上,受到document绑定的click事件影响,它现在是这样的:

1、点击编辑按钮,触发界面切换,然后

clipboard.png

2、点一下Select组件,他就……触发document的click事件,切换回去了!

clipboard.png

应该是事件冒泡的问题,但查询了相关问答如何阻止react的事件冒泡,未能解决问题。
这是简化的DEMO,希望能得到解答!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

请止步禁区 2022-09-13 01:43:14

reactdom关联起来就比较蛋疼 你就拿不到那个事件 怎么去阻止冒泡

看你的代码想到一个蛋疼的思路 可以看一下

const { Select, Button } = antd;
const Option = Select.Option;

const children = [];
for (let i = 10; i < 36; i++) {
  children.push(<Option key={i.toString(36) + i}>{i.toString(36) + i}</Option>);
}

function handleChange(value) {
  console.log(`selected ${value}`);
}

function handleClick(){
    console.log("切换为第二显示状态")
}

document.addEventListener('click', e => {
    if (e.target.nodeName.toLowerCase() === 'button') {
        return; 
      //阻止button所受影响
    }
   //切换页面显示状态
   //如何阻止点击Select组件所触发的click事件?
    var select = document.getElementsByClassName('toGetMySelectDom')[0]
    var target = e.target
     while (target.parentNode) {
         if (select == target) return
         target = target.parentNode
       }
    
    console.log('切换为第一显示状态');
}, false);

ReactDOM.render(
  <div>
    <Select
        mode="multiple"
        className="toGetMySelectDom"
        style={{ width: '50%' }}
        placeholder="Please select"
        defaultValue={['a10', 'c12']}
        onChange={handleChange}
    >
        {children}
    </Select>
    <Button onClick={handleClick}>按一下</Button>
 </div>
, mountNode);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文