2015-02-12 24 views
62

Su invio di un modulo, sto cercando di doSomething() invece del comportamento post predefinito.Impostazione onSubmit in React.js

A quanto pare in Reagire, onSubmit is a supported event for forms. Tuttavia, quando provo il seguente codice:

var OnSubmitTest = React.createClass({ 
    render: function() { 
     doSomething = function(){ 
      alert('it works!'); 
     } 

     return <form onSubmit={doSomething}> 
     <button>Click me</button> 
     </form>; 
    } 
}); 

Il metodo doSomething() è gestito, ma da allora in poi, il comportamento post predefinito è ancora effettuata.

È possibile verificare questo nel mio jsfiddle.

La mia domanda: come si impedisce il comportamento post predefinito?

risposta

74

Nella funzione doSomething(), passano in caso e e utilizzare e.preventDefault().

doSomething = function (e) { 
    alert('it works!'); 
    e.preventDefault(); 
} 
+12

A partire dal v0.13, di ritorno dal falso gestori di eventi verranno ignorati, quindi dovrete usare e.preventDefault() o e.stopPropagation () – joshuaegclark

+1

Come risposta, quest'ultimo è preferito. –

3

È possibile passare l'evento come argomento alla funzione e quindi impedire il comportamento predefinito.

var OnSubmitTest = React.createClass({ 
     render: function() { 
     doSomething = function(event){ 
      event.preventDefault(); 
      alert('it works!'); 
     } 

     return <form onSubmit={this.doSomething}> 
     <button>Click me</button> 
     </form>; 
    } 
}); 
+3

this.doSomething * – martin

+2

Nel mio caso, funziona con e senza 'this':' {this.doSomething} 'o' {doSomething} 'va bene perché' doSomething' sta utilizzando il 'render()'. – starikovs

35

Vorrei anche suggerire di spostare il gestore di eventi all'esterno del rendering.

var OnSubmitTest = React.createClass({ 

    submit: function(e){ 
    e.preventDefault(); 
    alert('it works!'); 
    } 

    render: function() { 
    return (
     <form onSubmit={this.submit}> 
     <button>Click me</button> 
     </form> 
    ); 
    } 
}); 
+1

Questo è il modo corretto di utilizzare il modulo nel componente :) – holms

7
<form onSubmit={(e) => {this.doSomething(); e.preventDefault();}}></form> 

funzionerà bene per me