首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ReactStrap句柄输入隐式提交

ReactStrap句柄输入隐式提交
EN

Stack Overflow用户
提问于 2018-12-12 15:56:07
回答 2查看 4.8K关注 0票数 3

每当我在输入文本框上按Enter键时,输入元素中的隐式提交就会触发提交并重新加载页面:

代码语言:javascript
复制
import React, { Component } from "react";
import { Col, Button, Form, FormGroup, Label, Input } from "reactstrap";
import "./SearchBar.css";

class SearchBar extends Component {
constructor(props) {
    super(props);
    this.state = {
      term: ""
    };

    this.handleTermChange = this.handleTermChange.bind(this);
    this.handleSearch = this.handleSearch.bind(this);
    this.handleEnter = this.handleEnter.bind(this);
}

handleTermChange(e) {
    this.setState({ term: e.target.value });
}

handleSearch() {
    this.props.searchEngine(this.state.term);
}

handleEnter(e) {
    if (e.key === 13) {
      this.handleSearch();
    }
}

render() {
    return (
    <Form className="searchbox">
        <FormGroup row>
        <Label for="searchId" sm={2}>
            Search Engine
        </Label>
        <Col sm={10}>
            <Input
            type="text"
            placeholder="Enter Sth"
            onChange={this.handleTermChange}
            onKeyDown={this.handleEnter}
            />
        </Col>
        </FormGroup>

        <FormGroup>
        <Col sm="2">
            <div className="">
            <Button
                onClick={this.handleSearch}
                className="btn"
            >
                Submit
            </Button>
            </div>
        </Col>
        </FormGroup>
    </Form>
    );
}
}

export default SearchBar;

我只想像上面那样使用处理程序触发搜索函数,但避免隐式提交,即单击Submit按钮时使用相同的函数。否则,它只是重新加载页面并清除返回的结果。

我做错什么了?我以前没有经历过类似的问题。

依赖关系:

  • “反应带”:"^6.5.0“
  • “引导”:"^4.1.3“
  • “反应”:"^16.6.3“
  • “反应”:"^16.6.3“
  • “react脚本”:"2.1.1“
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-13 02:57:56

我发现触发隐式提交的是<Form>元素。我将其更改为<Form className="searchbox" onSubmit={this.handleSubmit}>并添加一个新函数:

代码语言:javascript
复制
handleSubmit(e) { 
    e.preventDefault(); 
    this.handleSearch();
}

根据问题修改的完整工作代码:

代码语言:javascript
复制
import React, { Component } from "react";
import { Col, Button, Form, FormGroup, Label, Input } from "reactstrap";
import "./SearchBar.css";

class SearchBar extends Component {
constructor(props) {
    super(props);
        this.state = {
            term: ""
        };

    this.handleTermChange = this.handleTermChange.bind(this);
    this.handleSearch = this.handleSearch.bind(this);
    this.handleEnter = this.handleEnter.bind(this);
    this.handleSubmit = this.handleSubmit.bind(this);
    }

    handleTermChange(e) {
        this.setState({ term: e.target.value });
    }

    handleSearch() {
        this.props.searchEngine(this.state.term);
    }

    handleEnter(e) {
        if (e.key === 13) {
        this.handleSearch();
        }
    }

    handleSubmit(e) {
        e.preventDefault();
        this.handleSearch();
   }

render() {
    return (
    <Form className="searchbox" onSubmit={this.handleSubmit}>
        <FormGroup row>
        <Label for="searchId" sm={2}>
            Search Engine
        </Label>
        <Col sm={10}>
            <Input
            type="text"
            placeholder="Enter Sth"
            onChange={this.handleTermChange}
            onKeyDown={this.handleEnter}
            />
        </Col>
        </FormGroup>

        <FormGroup>
        <Col sm="2">
            <div className="">
            <Button
                onClick={this.handleSearch}
                className="btn"
            >
                Submit
            </Button>
            </div>
        </Col>
        </FormGroup>
    </Form>
    );
}
}

export default SearchBar;
票数 3
EN

Stack Overflow用户

发布于 2018-12-12 16:31:39

Enter键按下时,您需要防止默认事件。

代码语言:javascript
复制
handleEnter(e) {
    if (e.key === 13) {
     e.preventDefault();
     this.handleSearch();
    }
}

e.preventDefault()告诉用户代理,如果事件没有被显式处理,那么它的默认操作就不应该像通常那样进行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53746769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档