以下の例では、内部にチェックボックスを持つ簡単な<table>
があります。私はtd、trとチェックボックスでクリックイベントを持っています。私はチェックボックスをクリックしてtdとtrへのバブルを止めることができるようにしたい。単純な "event.stopPropagation()"はうまく動作します。React - テーブル内のラベルクリックの伝播を停止できません。
"htmlFor"を使用してチェックボックスに<label>
を接続すると、ラベルがクリックされたときにイベントがバブリングを止めることはありません(チェックボックス自体がクリックされても期待どおりに動作します) 。さらに、不思議なことに、バブルは奇妙な順序で起こるようです(チェックボックスのクリックは最後に受信されます)。
var Hello = React.createClass({
func1(e){
console.log('tr was clicked')
},
func2(e){
console.log('td was clicked')
},
func3(e){
e.stopPropagation();
console.log('Checkbox was clicked')
},
render: function() {
return <table>
<tbody>
<tr onClick={this.func1}>
<td onClick={this.func2}>
<input id="thing" type="checkbox" onClick={this.func3} />
<label htmlFor="thing"> label for checkbox</label>
</td>
</tr>
</tbody>
</table>;
}
});
ReactDOM.render(
<Hello name="World" />,
document.getElementById('container')
);
...そして、ここフィドルます:ここで
はコードだ https://jsfiddle.net/69z2wepo/52785/ (クリックイベント用のコンソールを見る)
を実際にラベルをクリックすると、* 2 *イベントを生成します)チェックボックスをクリックします。チェックボックスのみを処理していますが、ラベルは処理していません。ここに、単純なHTML + JSの例があります:https://jsfiddle.net/zh55jwzv/(これは反応するものではありません)。 –