2016-07-29 298 views
0

問題是onChange事件在輸入標記中未觸發。我之前使用LinkedStateMixin來跟蹤輸入值。最近,我想添加onChange事件來運行一些函數,然後我刪除了LinkedStateMixin,但onChange無法啓動。我試圖將e.stopPropagation()添加到setUsername(),但它不工作。我嘗試了其他事件,如onKeyDown,onClick和ect。他們都不能被解僱。問題是什麼?React onChange事件不會觸發

var React = require('react'); 

var SessionActions = require('../../actions/session_actions'); 
var UserStore = require('../../stores/user_store'); 

var LogInForm = React.createClass({ 

    getInitialState: function() { 
    return ({ 
     user: undefined, 
     username: '', 
     password: '', 
    }); 
    }, 

    componentDidMount: function() { 
    this.token = UserStore.addListener(this.updateUserStore); 
    }, 

    componentWillUnmount: function() { 
    this.token.remove(); 
    }, 

    updateUserStore: function() { 
    this.setState({user: UserStore.all()}); 
    this.setState({username: ''}); 
    this.setState({password: ''}); 
    }, 

    setUsername: function(e) { 
    console.log("Fired"); 
    }, 

    handleSubmit: function(e) { 
    e.preventDefault(); 
    SessionActions.logIn({ 
     username: this.state.username, 
     password: this.state.password 
    }); 
    this.updateUserStore(); 
    }, 

    render: function() { 
    return (
     <div> 
     <h4>Log In</h4> 
     <div> </div> 
     <form onSubmit={this.handleSubmit}> 
      <input onChange={this.setUsername} placeholder="Username" type="text"/> 

      <input placeholder="Password" type="password"/> 

      <input type="submit" value="Log In"/> 
     </form> 
     </div> 

    ); 
    } 
}); 

module.exports = LogInForm; 

回答

0

變化從setUsername到handleUsername函數名。

1

我創建this jsfiddle與您發佈的代碼,儘管有明顯的警告,onchange事件被觸發。所以我想你的代碼還有其他問題。

組件是否渲染?你能提供一個小提琴,它不工作,所以我可以看看?

+0

感謝您的幫助!我嘗試了你的小提琴,它是在小提琴中工作,但我不明白爲什麼它不工作在我的工作,這是我發佈完全相同。我正在使用chrome,表單可以呈現,但onChange不會觸發。我正在使用webpack,你認爲這會導致問題嗎? –

+0

我不認爲這是一個webpack的問題,因爲表單正在呈現。打開chrome開發工具並查看是否在控制檯中顯示任何警告或錯誤。 –

+0

我終於解決了這個問題!我將處理函數的名字從setUsername()更改爲handleUsername(),然後它就可以正常工作了!你知道爲什麼會發生這種情況嗎? –