[英]How do I retain focus when the user clicks a menu?
我有以下要求:
重現我的問題:-將光標放在輸入字段中-單擊菜單
預期:-菜單仍然可見
實際:-菜單消失了
在React中,這應該很簡單,但是我無法以最明顯的方式解決它,並且想知道我正在忽略什么。
class App extends React.Component {
constructor() {
super();
this.state = {};
this.handleFocus = this.handleFocus.bind(this);
this.handleBlur = this.handleBlur.bind(this);
}
handleFocus() {
this.setState({ hasFocus: true });
}
handleBlur() {
this.setState({ hasFocus: false});
}
handleMenuClick() {
this.setState({ hasFocus: true });
}
render() {
const { hasFocus } = this.state;
const menuInstance = (
<div
onClick={this.handleMenuClick}
tabIndex="0"
>
Some menu
</div>
);
return (
<div>
<h1>Focus issue</h1>
<p>How do I retain focus if the user clicks on the menu item?</p>
<input
onBlur={this.handleBlur}
onFocus={this.handleFocus}
defaultValue="some value"
/>
{ hasFocus && menuInstance }
</div>
);
}
}
此處的現場演示: http : //jsbin.com/zixuhoj/6/edit?js,控制台,輸出
您正在監聽模糊和單擊事件。 單擊事件之前會觸發模糊事件,因此永遠不會調用handleMenuClick
。
相反,你可以聽onMouseDown
,並設置標志menuClicked
或類似的東西,並期待在該標志blur
事件。
演示可以在這里找到: http : //jsbin.com/buzisepafu/1/edit?js,console,output
class App extends React.Component {
constructor() {
super();
this.state = {};
this.handleFocus = this.handleFocus.bind(this);
this.handleBlur = this.handleBlur.bind(this);
this.handleMenuClick = this.handleMenuClick.bind(this);
}
handleFocus() {
this.setState({ hasFocus: true });
}
handleBlur() {
if (!this.state.menuClicked) {
this.setState({ hasFocus: false});
}
}
handleMenuClick (event) {
this.setState({ menuClicked: true });
}
render() {
const { hasFocus } = this.state;
const menuInstance = (
<div
className="menu"
onMouseDown={this.handleMenuClick}
tabIndex="0"
>
Some menu
</div>
);
return (
<div>
<h1>Focus issue</h1>
<p>How do I retain focus if the user clicks on the menu item?</p>
<input
onBlur={this.handleBlur}
onFocus={this.handleFocus}
defaultValue="some value"
/>
{ hasFocus && menuInstance }
</div>
);
}
}
ReactDOM.render(<App />, document.getElementById('app'));
我發現了一種在我的環境中relatedElement
方法,在該環境中,用戶只有Chrome,我將onBlur
處理程序放在外部div
並檢查blur
事件上的relatedElement
是否在外部div
內。
隨意問您是否要我詳細說明。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.