inputタグにフォーカスを固定する
あるinput要素のフォーカスを外れないようにしたい場合、フォーカスが外れたタイミングで再度フォーカスを当てるという方法で実現できます。
たとえばReactでは下記のような感じです。
componentDidMount() {
//フォーカス固定したいinput要素をstateに保持
this.state.input = ReactDOM.findDOMNode(this.refs.input)
this.state.input.focus()
}
render() {
return (
<div>
<input
type={'text'}
onBlur={() => {
//フォーカスが外れる際に再度フォーカスを当てる
this.state.input.focus()
}}
ref={'input'}
/>
</div>
)
}
onBlurイベントは、フォーム部品からフォーカスが外れた際に呼ばれるイベントです。
ここではフォーカスが外れたタイミングで再度フォーカスを当てる処理をすることで、結果的にフォーカスが固定されたような動作にしています。
componentDidMount()でやっているinput要素をstateに保存する処理は必須ではありません。
onBlur={() => {
ReactDOM.findDOMNode(this.refs.input).focus()
}}
のように直接呼び出してしまってもいいと思います。
複数の場所で呼び出す場合にはstateから呼び出せると便利です。

コメント