2017-10-26 4 views
0

ロジックがターゲット要素にフォーカスを戻す(およびTypeScriptでこれを書き込む)ReactコンポーネントにonBlurイベントハンドラを添付しました。onBlurを使用してReactコンポーネントのフォーカスを設定する

emailBlur(e: React.FocusEvent<HTMLInputElement>) { 
    e.currentTarget.focus(); 
    e.preventDefault(); 
    // re-ordering these statements makes no difference 
} 

これは

<input type="email" onBlur={this.emailBlur} /> 

さらに、コンストラクタは

this.emailBlur = this.emailBlur.bind(this); 

が含まれています。しかし、フォーカスが設定れることは決してありませんバインドされている - 私は、別の要素にターゲット要素からフォーカスを決してクリックしない場合をターゲット要素に戻ります。

なぜターゲット要素にフォーカスが戻っていないのですか?

+0

react.jsのどのバージョンを使用しますか?コンソールにエラーがありますか? –

答えて

1

あなたはe.currentTargetと、このようなタイムアウトを使用してみましたfocusのでblurが完了する前に?

e.preventDefault(); 
const target = e.currentTarget; 
setTimeout(
    function() { 
     target.focus(); 
    }, 
    5 
); 
0

Why isn't the focus being set back to the target element?

使用setTimeoutもう一度

+0

500msタイマで 'setTimeout'にラップすると、例外が発生します。「TypeError:e.currentTarget.focusは関数ではありません。 'e.target ...'または 'e.relatedTarget ... 'を使うように文を切り替えると、' focus'は関数やプロパティではないと言われます。 – awj

+0

また、 'e.preventDefault'を使用している場合、なぜ' blur'が完了するのを待つ必要がありますか? – awj

関連する問題