2017-04-09 12 views
1

Ich habe ein aus wie folgt aus:Widersprüchliche Veranstaltungen: onKeyPress & onClick

enter image description here

Mit dem folgenden Code:

<form onKeyPress={this.login.bind(this)}> 
    <input type="text" placeholder="username"/> 
    <input type="password" placeholder="password"/> 
    <button type="button" onClick={this.login.bind(this)}>Log In</button> 
</form> 

Während ich habe die login() Methode wie unten:

login(e){ 
    if((e.type==='keypress' && e.which===13) || e.type==='click'){   
      //Do login operations: 
      this.props.store.login()//the method inside MobX store 
    } 
} 

In folgenden Szenarien gibt es keine Fehler und ich kann l ogin:

  1. ich auf der mit Maus login Schaltfläche klicken
  2. I Enter drücken, während der Login-Button
  3. konzentriert NICHT ist

Aber die folgende dritte Szenario gibt mir Fehler aufgrund der Login Operationen werden zweimal aufgerufen:

  1. Wenn ich drücke Geben Sie während der Login-Taste IS focu sed

(zB Login-Button drücken Registerkarte Taste fokussiert ist) Ich frage mich, was die beste Praxis ist, durch die ich die Fehler der dritten Szenario zu vermeiden. Ich habe andere verwandte SO-Fragen durchgesehen, aber ich konnte die beste Vorgehensweise nicht herausfinden.


Ich habe vergessen zu erwähnen, dass ich ReactJS mit MobX verwende.

+0

Bitte t ag die Frage mit dem Rahmen, den Sie verwenden. Die Art, mit submit on click und on enter umzugehen, besteht darin, NUR die Submit zu binden und eine Submit-Schaltfläche zu haben. – mplungjan

+0

@mplungjan Danke, ich habe ReactJS und MobX Tags hinzugefügt – user3405291

+0

http://stackoverflow.com/questions/38262148/react-handle-form -submit – mplungjan

Antwort

1

das Problem gelöst durch onKeyPress Attribut von <form> Tag bewegen, um Text-Typ <input> tags:

<form> 
    <input type="text" placeholder="username" onKeyPress={this.login.bind(this)}/> 
    <input type="password" placeholder="password" onKeyPress={this.login.bind(this)}/> 
    <button type="button" onClick={this.login.bind(this)}>Log In</button> 
</form> 
1

Sie könnten auch das onSubmit Ereignis verwenden, wenn es Ihren Anwendungsfall paßt besser:

Beispiel (JS Bin)

class App extends Component { 
    login = (e) => { 
    e.preventDefault(); 
    console.log('login'); 
    } 
    render() { 
    return (
     <form onSubmit={this.login}> 
     <input type="text" placeholder="username" /> 
     <input type="password" placeholder="password" /> 
     <button type="submit">Log In</button> 
     </form> 
    ); 
    } 
}