2015-02-12 24 views
62

Po przesłaniu formularza próbuję wykonać doSomething() zamiast domyślnego zachowania wpisu.Ustawienie opcji Wyślij w pliku React.js

Podobno w React, onSubmit is a supported event for forms. Jednak kiedy próbuję następujący kod:

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

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

Sposób doSomething() jest uruchamiany, ale potem, domyślne zachowanie post jest nadal prowadzone.

Możesz to przetestować w moim jsfiddle.

Moje pytanie: Jak zapobiec domyślnemu zachowaniu się postu?

Odpowiedz

74

W swojej funkcji należy przekazać zdarzenie e i użyć e.preventDefault().

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

As z v0.13, powracającego fałszywe od obsługi zdarzeń będą ignorowane, więc będziesz musiał użyć e.preventDefault() lub (e.stopPropagation) – joshuaegclark

+1

Zgodnie z odpowiedzią preferowane jest drugie. –

3

można przekazać zdarzenia jako argument do funkcji, a następnie zapobiec zachowanie domyślne.

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

W moim przypadku działa z i bez 'this':' {this.doComething} 'lub' {doSomething} 'jest w porządku, ponieważ' doS Something' ma 'rendering()'. – starikovs

35

Proponuję również przenieść obsługę zdarzeń poza render.

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

To jest właściwy sposób użycia formularza w komponencie :) – holms

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

to działa dobrze dla mnie