0

I want to submit the results of a form when the user clicks a button, but, the button is not embedded within the form itself. I want to put my button in my app component, so I followed the highest rated suggestion here:

How to submit form from a button outside that component in React?

but it doesn't work. Here is my code:

textbox.jsx

import React, { Component } from "react";

class TextBox extends React.Component {
  render() {
    return (
      <form id="my-form" onSubmit={this.mySubmitHandler} className="textarea">
        <textarea
          className="textarea"
          placeholder={"Enter text in " + this.props.language}
          value={this.props.input}
          type="text"
          name="equation"
          onChange={this.handleInputChange}
          onKeyDown={this.keyPress}
        />
      </form>
    );
  }
  handleInputChange = event => {
    event.preventDefault();
    this.setState({
      [event.target.name]: event.target.value
    });
    this.props.inputChange(event.target.value);
  };

  mySubmitHandler = event => {
    console.log("SUBMIT");
    event.preventDefault();
    this.props.formSubmitted();
  };

  keyPress = event => {
    if (event.keyCode == 13 && event.shiftKey == false) {
      this.mySubmitHandler(event);
    }
  };
}

export default TextBox;

app.js

class App extends React.Component {
  render() {
    return (
      <button id="my-form" className="Submit" type="submit"></button>
      <div className="textContainer">
        <div className="LeftText">
          <TextBox
            autotranslate={this.state.auto_translate}
            formSubmitted={this.formSubmitted}
            inputChange={this.inputChange}
            input={this.state.input}
            language={this.state.languages[this.state.source_i]}
          />
        </div>
     );
  }
}
4
  • The App doesn't render TextBox Commented Dec 17, 2019 at 10:21
  • sorry, i omitted most of the code, i'll update Commented Dec 17, 2019 at 10:22
  • Please add all code necessary for MINIMAL PRODUCIBLE example, your code won't even compile. How to create a Minimal, Reproducible Example Commented Dec 17, 2019 at 10:26
  • Any console error? Commented Dec 17, 2019 at 10:26

1 Answer 1

2

Try adding form attribute to your button:

<button form="my-form" id="my-form" type="submit">
  Submit
</button>
import React from 'react';
import ReactDOM from 'react-dom';

class TextBox extends React.Component {
  render() {
    return (
      <form id="my-form" onSubmit={this.mySubmitHandler}>
        <textarea />
      </form>
    );
  }

  mySubmitHandler = event => {
    console.log('SUBMIT');
    event.preventDefault();
  };
}

class App extends React.Component {
  render() {
    return (
      <>
        <TextBox />
        <button form="my-form" type="submit">
          Submit
        </button>
      </>
    );
  }
}

ReactDOM.render(<App />, document.getElementById('root'));

Edit reverent-bush-8elfn

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.