2016-10-04 12 views
0

次のような視覚的なコンポーネントがあります。ぼかしイベント:要素内でクリックが発生した場合はぼかしを適用しない

Basic Color Picker Component

Here is a simplified codepen recreation

主な問題はここに来る:

<div className={styles.colorPicker}> 
    <input 
    readOnly 
    type="text" 
    value={color} 
    onFocus={this.showColorPalette} 
    onBlur={this.hideColorPalette} 
    /> 
    <Palette 
    color={color} 
    onSelect={this.selectColor} 
    /> 
</div> 

意図行動は、彼らがコンポーネントをぼかしたときに、カラーパレットを非表示にする、ということです。 ただし、の場合は、カラーパレットで何かをクリックした場合、パレットを非表示にしてはいけません。

カラーパレットをクリックすると入力がぼやけるため、パレットが非表示になります。パレットのonClickメソッドを入力のonBlurメソッドと調整する方法が見つからないので、もう一方のメソッドをオーバーライドする方法はありません。

反応でこれを行う方法はありますか?

+1

をチェック反応日/ blob/master/src/components/OutsideClickHandler.jsx)。次に、 ' – niba

+0

のような使い方ができますが、' tab'を押すと、次の入力フィールド? – corvid

+0

次の入力はonfocusイベントで 'hideColorPallete'を呼び出す必要があります – niba

答えて

2

blur()を条件付きでトリガーするには、onMouseEnteronMousLeaveを使って試してみました。これにより、カラーパレットは色を選択するために表示され、色を選択するか、入力ボックスの外側をクリックするとぼやけます。

私の最初のアイデアは、ユーザーが外にクリックしたときにイベントを発生コンポーネントを反応させる実装するため、ここであなたがAirbnb [実装](https://github.com/airbnb/を持っているupdatdeペンに

http://codepen.io/pranesh-r/pen/EgoaGK?editors=0110

+0

これは期待どおりに動作します!回答ありがとうございました – corvid

+0

@corvid喜んで助けました。投票して答えを受け入れる –

関連する問題