2017-01-11 24 views
1

反応コンポーネントのdisabled属性を設定すると、その要素のonClickハンドラがブロックされることが予想されます。無効になっているときにonClickハンドラを無効にするのはなぜですか?

<a role="button" 
     className={`btn btn-block btn-info`} 
     disabled={!this.state.readyToView} 
     href={this.state.selectedObjectLink} 
     onClick={this.handleLink} 
     >View</a> 

ただし、要素には「無効」属性が表示されますが、それでもクリックイベントが登録されます。

編集:私は明らかにする必要があります - handleLinkでclickイベントを処理しますが、無効な属性がハンドラを削除しない理由を知りたいのですが?混乱を招いて申し訳ありません。

+0

は、 'pointer-events:none;'というCSSプロパティを使用してください。 –

+1

状態が変更された場合は、onClickハンドラ – samsonthehero

+0

を使わずに要素を再度レンダリングし、条件に依存する関数として 'handleLink'をtrueまたはfalseで返すことはできますか? – pilczuk

答えて

3

問題がdisabledではありません。それはHTML要素aです。アンカー<a>には無効なプロパティを設定することはできません(その意味は?)。要素をボタンのように見せるためにCSSを渡したからといって、ボタンにしないでください。それはまだアンカーです。

ソリューションは、どちらかになります(ボタンのような)何か他のものを使用する:

<button role="button" 
     className={`btn btn-block btn-info`} 
     disabled={!this.state.readyToView} 
     onClick={this.handleLink} 
     >View</button> 

ページへ

をリダイレクトするか、他の多くの候補の1つを使用したい場合は、handleLinkthis.state.selectedObjectLinkを使用することができますこのページで

+0

には無効な属性はありませんアンカーが無効になっていると仮定して、クリックハンドラを削除してリンクを無効にしますが、無効になっているのはアンカータグの有効な属性ではありません。https:/ /dev.w3.org/html5/html-author/#the-a-element – Liz

+0

ご協力いただきありがとうございます! – Liz

3

あなたは、あなたのクリックハンドラでちょうどhandleLinkでこれを扱えないのはなぜこの

<a role="button" 
     className={`btn btn-block btn-info`} 
     disabled={!this.state.readyToView} 
     onClick={this.state.readyToView && this.handleLink} 
     > 
     View 
</a> 

jsfiddle

5

のようなものが条件を追加することができますか?

handleLink() { 
    if (!this.state.readyToView) return 
    // ... 
} 

あなたが本当にバインド/動的ハンドラを削除したい場合は、あなたがこのような何かを行うことができます。

const clickHandler = this.state.readyToView ? this.handleLink : null 
... 
<a role="button" 
    ... 
    ... 
    onClick={clickHandler} 
>View</a> 
+0

私はhandleLink()でそれを処理しますが、なぜ無効にした場合に反応がハンドラを無効にしないのか混乱していますか? – Liz

関連する問題