2016-11-21 114 views
0

我與反應工作,並以下教程表單提交了一把,我碰上我的控制檯這個問題:獲取一個event.preventDefault();不是一個功能。爲什麼它不是一個功能?

contact.js:67 Uncaught TypeError: event.preventDefault is not a function(…) 

這裏是我的代碼:

contact.js

class ContactForm extends Component { 


    constructor(props) { 
    super(props); 
    this.handleSubmit = this.handleSubmit.bind(this); 
    this.state = { open: false }; 
    } 

    handleSubmit(event) { 
    console.log('hello'); 
    event.preventDefault(); 
    } 

    handleTouchTap =() => { 
    this.setState({ open: true }); 
    } 

    handleRequestClose =() => { 
    this.setState({ open: false }); 
    } 

    render() { 
    return(
     <div> 
     <Paper className="Form" zDepth={2}> 
      <Formsy.Form onSubmit={this.handleSubmit}> 
      <FormsyText 
       name="Enter Name" 
       floatingLabelText="Enter your name" 
      /> 
      <FormsyText 
       name="Enter email address" 
       floatingLabelText="Enter your email address" 
      /> 
      <FormsyText 
       name="message" 
       floatingLabelText="What can I do for you?" 
      /> 
      <RaisedButton onTouchTap={this.handleTouchTap} 
       type="submit" 
       label="Submit your message" 
       primary={true} 
      /> 
      <Snackbar 
       open={this.state.open} 
       message="Thank your for submitting your message. I'll get back to you as soon as I can!" 
       autoHideDuration={2000} 
       onRequestClose={this.handleRequestClose} 
      /> 
      </Formsy.Form> 
     </Paper> 
     </div> 
    ); 
    } 
} 

export { ContactForm }; 

正如你可以看到我的代碼和我所知道的,我已經正確地將handleSubmit綁定到我的ContactForm,並且應該在onSubmit處理程序上正確調用它this.handleSubmit。我在這裏可能會錯過什麼?

回答

3

你不使用默認的形式...

這是Formsy

從文檔

https://github.com/christianalfoni/formsy-react/blob/master/API.md#onsubmit

的onsubmit(數據,resetForm,invalidateForm)

在提交按鈕時需要運行 函數已被點擊。

第一個參數是表單的數據。第二個參數將重置表格 。第三個參數將通過將 映射到輸入的對象使表單無效。這對於服務器端 驗證非常有用。例如。 {email:「收到此郵件」}。重置或 使表單失效將導致setState在表單元素 組件上運行。

0

Formsy將表單數據作爲第一個參數傳遞給提交事件處理程序。 此表格數據沒有功能preventDefault()

如果你指的是內部實現提交機制,你會看到preventDefault()總是默認名稱爲:

submit: function (event) { 

    event && event.preventDefault(); 

    // Trigger form as not pristine. 
    // If any inputs have not been touched yet this will make them dirty 
    // so validation becomes visible (if based on isPristine) 
    this.setFormPristine(false); 
    var model = this.getModel(); 
    this.props.onSubmit(model, this.resetModel, this.updateInputsWithError); 
    this.state.isValid ? this.props.onValidSubmit(model, this.resetModel, this.updateInputsWithError) : this.props.onInvalidSubmit(model, this.resetModel, this.updateInputsWithError); 

}, 

Source