- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我现有的工作代码。这工作正常,除了如果我在子菜单外单击,当它打开时,子菜单保持打开状态。
class UserTypeDropdown extends React.Component
constructor: (props) ->
super(props)
@state =
display_submenu: false
@propTypes:
selected: React.PropTypes.string.isRequired
submenu_display:->
if @state.display_submenu
'block'
else
'none'
button_class_names:->
classNames(
'select-btn ': true,
'user_role ': @props.selected is 'user',
'admin_role ': @props.selected is 'admin'
)
selected_text:->
if @props.selected == 'user'
'User'
else
'Administrator'
render:->
div {className: 'user-type-dropdown'},
button { className: @button_class_names(), onClick: @_toggleSubmenu },
@selected_text()
ul {className: 'submenu submenu_content access_submenu', style: {display: @submenu_display()}},
li {onClick: @select_admin},
a {},
'Administrator'
li {onClick: @select_user},
a {},
'User'
_toggleSubmenu: =>
@setState display_submenu: !@state.display_submenu
select_admin: =>
@_toggleSubmenu()
actions.setUserRole('admin')
select_user: =>
@_toggleSubmenu()
actions.setUserRole('user')
我想实现在子菜单打开时点击外部菜单,然后将其关闭。
我已经阅读了如何在 React 中执行此操作,并且遇到了很多建议说我应该使用 onFocus 和 onBlur 而不是 onClick
这对我来说很有意义,因为它意味着只有在浏览器中获得焦点时,下拉菜单才应该打开。所以我的渲染函数和方法变成了。
render:->
div {className: 'user-type-dropdown'},
button { className: @button_class_names(), onFocus: @_toggleSubmenu, onBlur: @_toggleSubmenu },
@selected_text()
ul {className: 'submenu submenu_content access_submenu', style: {display: @submenu_display()}},
li {onClick: @select_admin},
a {},
'Administrator'
li {onClick: @select_user},
a {},
'User'
_toggleSubmenu: =>
@setState display_submenu: !@state.display_submenu
select_admin: =>
actions.setUserRole('admin')
select_user: =>
actions.setUserRole('user')
但是在 button
元素上使用 onFocus:
和 onBlur:
,现在点击 li
中的任何一个都不会触发 @select_admin
或 @select_user
它只会触发 @_toggle_submenu
并且点击似乎没有传播/冒泡到下面的 li
元素..
来自阅读React Event Documentation和 This Focus and hotkeys guide我可以看到事件应该冒出来,但对我来说它们根本没有。
我是 React Coffescript/JS 世界的新手,所以请原谅任何不正确的命名约定。
我想我的理解一定是有缺陷的,因为我在任何地方都找不到这个问题的答案。
如有任何帮助,我们将不胜感激。
最佳答案
您的问题是:只要您单击一个项目,onBlur 事件就会首先触发。这会导致重新渲染(因为你做了 setState
)。因此您的 onClick 事件永远不会运行。
解决此问题的方法(使用 onFocus 和 onBlur)是重新安排您的 HTML 设置:
<button>
已经可以)<li>
可以)这样,如果您单击其中一个子项,您的主菜单项就不会失去焦点。
您可以找到一个简单的(仅限 HTML 和 javascript)JSBIN example here .
关于javascript - 我想在 React 中做一个下拉菜单。单击一个按钮应打开一个子菜单。在子菜单外单击应将其关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33940242/
我是一名优秀的程序员,十分优秀!