2016-07-29 25 views
0

Das Ereignis onChange wird nicht im Eingabe-Tag ausgelöst. Ich habe LinkedStateMixin verwendet, um den Eingabewert vorher zu verfolgen. In letzter Zeit möchte ich ein OnChange-Ereignis hinzufügen, um eine Funktion auszuführen, und dann habe ich LinkedStateMixin entfernt, aber OnChange kann nicht ausgelöst werden. Ich habe versucht, e.stopPropagation() zu setUsername() hinzuzufügen, aber es funktioniert auch nicht. Ich habe andere Ereignisse wie onKeyDown, onClick und ect ausprobiert. keiner von ihnen kann gefeuert werden. Was ist das Problem?React onChange-Ereignis wird nicht ausgelöst

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; 

Antwort

0

Ändern Sie den Funktionsnamen von setUsername zu handleUsername.

1

I erstellt this jsfiddle mit dem Code, den Sie geschrieben und, trotz der offensichtlichen Warnungen wird das onchange Ereignis ausgelöst. Ich nehme an, dass mit Ihrem Code etwas nicht stimmt.

Wird die Komponente sogar gerendert? Könntest du mir eine Geige geben, wo es nicht funktioniert, damit ich es dir ansehen kann?

+0

Danke für Ihre Hilfe! Ich habe versucht, deine Geige, es funktioniert in der Geige, aber ich verstehe nicht, warum es nicht funktioniert auf meiner, die genau das gleiche ist, was ich poste. Ich verwende Chrom, und das Formular kann rendern, aber onChange wird nicht ausgelöst. Ich benutze Webpack, denkst du, dass es das Problem verursacht? –

+0

Ich glaube nicht, dass es ein Webpack-Problem ist, weil das Formular gerendert wird. Öffnen Sie die Chrome-Entwicklungstools, und prüfen Sie, ob eine Warnung oder ein Fehler in der Konsole ausgegeben wird. –

+0

Ich löse endlich dieses Problem! Ich ändere den Namen der Handler-Funktion von setUsername() zu handleUsername(), dann funktioniert es gut! Weißt du, warum das passiert ist? –