【发布时间】:2019-03-07 09:28:17
【问题描述】:
对于这个模棱两可的标题,我深表歉意。很难用一句话来说明问题。
首先,我的代码结构是这样的(使用 JSX)
<Parent>
<EditableText1 />
<EditableText2 />
</Parent>
这是我希望它的工作方式:
在默认状态下,ET2(EditableText2)的“显示”为“无”
当 'Parent' 为 'Focus' ET2 的 'display' 值变为 'flex'
当 'Parent' 为 'Blur' 时,ET2 的 'display' 值再次变为 'none'
也就是说,如果选择了 ET1(ET1 可见),则 ET2 变为可见,并且可以在该状态下编辑 ET2。
这是我的尝试:
1)
<Parent
onFocus={() => { this.setState({ visible: 'flex' }) }}
onBlur={() => { this.setState({ visible: 'none' }) }>
<EditableText1 />
<EditableText2 className={css`
display: ${this.state.visible};
`/>
</Parent>
这里的问题是这样的:
当 ET1 成为“焦点”时,会出现 ET2。但是,如果我尝试选择 ET2,则 ET1 变为“模糊”,因此 ET2 的“显示”变为“无”。所以我不能选择ET2!
2) 所以我尽量防止ET1模糊时冒泡:
<Parent
onFocus={() => { this.setState({ visible: 'flex' }) }}
onBlur={() => { this.setState({ visible: 'none' }) }>
<EditableText1
onBlur={(e) => { e.stopPropagation() }}
/>
<EditableText2 className={css`
display: ${this.state.visible};
`/>
</Parent>
这个案例的问题是这样的:
现在可以在 ET1 聚焦后选择 ET2。 但, 如果我从 ET1 模糊到 Parent 之外,则 ET2 的“显示”不会变为“无”。
如果我从 ET2 模糊父级之外,“显示”将变为“无”(我希望它的工作方式)。
我不知道该怎么办了。这似乎是因为我缺乏知识。任何人都可以给我一个方法或给我一个提示吗?
【问题讨论】:
-
如果你在这个问题的标题中找到合适的句子,如果你能告诉我,我将不胜感激。
标签: javascript html css reactjs dom