2015-02-12 24 views
62

Khi gửi biểu mẫu, tôi đang cố gắng doSomething() thay vì hành vi bài đăng mặc định.Thiết lập onSubmit trong React.js

Rõ ràng trong phản ứng, onSubmit is a supported event for forms. Tuy nhiên, khi tôi thử đoạn mã sau:

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

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

Phương pháp doSomething() đang chạy, nhưng sau đó, hành vi bài mặc định vẫn tiến hành.

Bạn có thể kiểm tra điều này trong số jsfiddle của mình.

Câu hỏi của tôi: Làm cách nào để ngăn chặn hành vi đăng mặc định?

Trả lời

74

Trong chức năng doSomething() của bạn, vượt qua sự kiện e và sử dụng e.preventDefault().

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

Tính đến v0.13, trả về false từ xử lý sự kiện sẽ bị bỏ qua, vì vậy bạn sẽ phải sử dụng e.preventDefault() hoặc e.stopPropagation () – joshuaegclark

+1

Như đã trả lời, sau này được ưu tiên. –

3

Bạn có thể chuyển sự kiện làm đối số cho hàm và sau đó ngăn chặn hành vi mặc định.

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

Trong trường hợp của tôi, nó hoạt động có và không có 'this':' {this.doSomething} 'hoặc' {doSomething} 'là tốt bởi vì' doSomething' là với 'render()'. – starikovs

35

Tôi cũng khuyên bạn nên di chuyển trình xử lý sự kiện ra ngoài hiển thị.

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

Đây là cách thích hợp để sử dụng biểu mẫu trong thành phần :) – holms

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

nó hoạt động tốt cho tôi

Các vấn đề liên quan