我有一个在btn点击时打开的下拉菜单。
func fromBase64() -> String? {
guard let data = Data(base64Encoded: self) else {
return nil
}
return String(data: data, encoding: .utf8)
}
在外部点击下拉菜单上也被关闭。
toggleAllCategories() {
this.setState({ isOpenAllCategories: !this.state.isOpenAllCategories });
}
但是问题是我无法单击按钮来打开和关闭下拉菜单。
当我在按钮下拉列表上单击两次仍处于打开状态时,会单击外部按钮。
如何在按钮上设置togglebleDroopdown并同时单击外部关闭?
STACKBLITZ实时示例: https://downloads.gradle-dn.com/distributions/gradle-3.4.2-all.zip
这是下拉列表的组件和整个实现以及相关的逻辑:
handleClickOutside(event) {
if (this.wrapperRef && !this.wrapperRef.contains(event.target)) {
this.toggleAllCategories();
}
}
答案 0 :(得分:2)
您可以使用event.target.tagName
检查触发点击的元素。
为防止两次切换,您可以执行以下操作:
handleClickOutside(event) {
if (this.wrapperRef && !this.wrapperRef.contains(event.target) &&event.target.tagName.toLowerCase() !== 'button') {
this.toggleAllCategories();
}
}
编辑: 另一种方法
buttonRef
。现在将handleClickOutside
更新为此:
handleClickOutside(event) {
if (this.wrapperRef && !this.wrapperRef.contains(event.target) &&event.target !== buttonRef.current) {
this.toggleAllCategories();
}
}
这将是更合适的方式。
希望这会有所帮助!
答案 1 :(得分:1)
在按钮单击的情况下,toggleAllCategories
被触发两次。一次点击按钮,另一次点击handleClickOutside
。您需要从一个地方调用