2016-10-07 13 views
19

クリックイベントを手動でトリガーするにはReactJS? ユーザーがelement1をクリックすると、inputタグのクリックが自動的にトリガーされます。ReactJSでクリックイベントを手動でトリガする方法はありますか?

<div className="div-margins logoContainer"> 
    <div id="element1" className="content" onClick={this.uploadLogoIcon}> 
    <div className="logoBlank" /> 
    </div> 
    <input accept="image/*" type="file" className="hide"/> 
</div> 
+0

いくつかの外部ライブラリを見ると、入力要素をプログラムによって作成することをお勧めします。https://github.com/okonet/react-dropzone/blob/master/src/index.js#L7 –

+0

Reactでこれをやりたがっている理由が分かりません。あなたは何を探していますか? – tobiasandersen

+0

@tobiasandersenプログラマチックにトリガされたクリックで質問者が達成したいと考えているような、プログラム上で 'input'要素をフォーカスするのは完全に有効なユースケースです。 –

答えて

37

あなたは、後でHTMLElement.clickメソッドを使用してイベントハンドラからのクリックをトリガするために、その参照を使用して、クラスのプロパティとして参照を格納、コールバックを通じて基礎となるHTMLInputElementオブジェクトへの参照を取得するためにref小道具を使用することができます。あなたのイベントハンドラで

<input ref={input => this.inputElement = input} ... /> 

:あなたのrender方法で

this.inputElement.click(); 

は、コールバックでthisの正しい字句スコープを提供ES6 arrow functionに注意してください。また、このように取得したオブジェクトは、document.getElementByIdを使用して取得するオブジェクトに似たオブジェクト、つまり実際のDOMノードです。

+1

これは私のために働いていません。それが期限切れであるかどうかは分かりませんが、要素を正しく割り当てることができますが、 'click 'を呼び出すと' click'は定義されません。私はその要素に割り当てた他のすべての属性とコールバックを見ることができます。何か案は? – TheJKFever

+0

@TheJKFever - あなたのコードを知らないと言うことは不可能ですが、取得している参照は実際にはHTMLInputElement'オブジェクトではありません。 'instanceof this.inputElement'は何を与えますか? –

+0

これは私にとってはうまくいきません。クリックは未定義です。 – venkatareddy

7

あなたはnodeを返しますrefコールバックを使用することができます。そのノードのclick()に電話して、プログラムによるクリックを行います。

設定divノード

clickDiv(el) { 
    el.click() 
} 

を取得refdivノード

<div 
    id="element1" 
    className="content" 
    ref={this.clickDiv} 
    onClick={this.uploadLogoIcon} 
> 

にフィドル

https://jsfiddle.net/pranesh_ravi/5skk51ap/1/

はそれが役に立てば幸いをチェック!

+0

jsfiddleにリンクするときは、ここに関連コードを入れておくのが良い方法です(btw:スニペットエディタもreactjsをサポートしています) – Icepickle

+0

スニペットを追加しました!指摘してくれてありがとう! –

+4

文字列参照アプローチは推奨されていませんが、コールバックベースの構文で置き換えられたレガシー機能と見なされます: 'ref = {elem => this.elem = elem}' - これは[コンポーネントへの参照](https://facebook.github.io/react/docs/more-about-refs.html)。 –

関連する問題