2017-02-09 6 views
0

firefoxchromeで異なる動作があり、firefoxが正しいと思います。ボタンonClickは、Chromeブラウザで値の代わりに内部HTMLを返します。

firefoxconsoleに印刷されます:これを印刷します

<button value="2" class="mdl-button mdl-js-button mdl-button--icon" data-upgraded=",MaterialButton"> 

chromeながら:

<button value={props.value} className="mdl-button mdl-js-button mdl-button--icon" onClick={(e) => { 
    e.preventDefault(); 
    props.onClick(e); 
}}> 
    <i className="material-icons">{props.icon}</i> 
</button> 


onClick(e) { 
    console.log(e.target); 
} 

答えて

0

クロスブラウザの問題を避けるために、最善の解決策ではなく、イベント自体のクリックハンドラ関数に値を渡すことです。

1

e.targetあなたの例では、<button />のようにクリックしたDOMの最後の葉を与えます。すなわち、<i />です。次の例では

、試してみてください。

  1. をボタンe.targetのコーナーでクリックする=== button

  2. ボタンe.targetの途中でクリックする== = i

enter image description here

class App extends React.Component{ 
 

 
    
 
    
 
    render() { 
 
    return (
 
     <button value={this.props.value} className="mdl-button mdl-js-button mdl-button-icon" onClick={(e) => { 
 
    e.preventDefault(); 
 
    this.props.onClick(e); 
 
}}> 
 
    <i className="material-icons">{this.props.icon}</i> 
 
</button> 
 
    ) 
 
    } 
 
} 
 

 

 
ReactDOM.render(<App icon="click me" onClick={(e) => console.log(e.target)} />, document.querySelector('#app'))
.mdl-button { 
 
    font-size: 15px; 
 
    width: 200px; 
 
    height: 40px; 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script> 
 
<div id="app" ></div>

+1

素晴らしい説明+1 :) –

関連する問題