【问题标题】:Weird behaiviour onsubmit react-bootstrap form奇怪的行为 onsubmit react-bootstrap 表单
【发布时间】:2020-04-21 15:22:01
【问题描述】:

我正在使用 react-bootstrap,但我注意到表单提交时出现了一些奇怪的行为。

我有一个登录文件,它是一个模态表单

        <Modal>  
        ...
          <Form
            className="d-flex justify-content-center align-items-center flex-column"
            onSubmit={onSubmitSignIn}
          >
            <Form.Group controlId="formBasicEmail">
              <Form.Control
                type="email"
                placeholder="Enter email"
                className={`signInputStyle ${
                  invalidEmail ? "invalidFieldStyle" : ""
                }`}
                value={email}
                onChange={handleEmailValidation}
                required
              />
              <div>
                <small className="errorFormText">
                  {invalidEmail ? "must be a valid email" : ""}
                </small>
              </div>
            </Form.Group>
           ...
            <div className="signupAcc">
              Do not have an account?
              <span onClick={() => setModalShow(true)}>SignUp</span>
              <SignUp show={modalShow} onHide={() => setModalShow(false)} />
           </div>
         ...
       </Form>
      </Modal>        

在登录组件中,当您单击 SignUp span 时,它会显示第二个模态(用于注册,因此我现在有两个模态)。

注册模式与登录模式类似,都具有onSubmit功能。

      <Modal>  
        ...
         <Form
            className="d-flex justify-content-center align-items-center flex-column"
            onSubmit={onSubmitValue}
          >
            <Form.Group controlId="formGridFirstName1">
              <Form.Control
                placeholder="First Name"
                required
                name="firstname"
                className={`signInputStyle ${
                  invalidateField.firstname ? "invalidFieldStyle" : ""
                }`}
                onChange={handleUserInput}
              />
              <div>
                <small className="errorFormText">
                  {invalidateField.firstname
                    ? "must be at least three letters"
                    : ""}
                </small>
              </div>
            </Form.Group>
         ...
       </Form>
      </Modal>        

我注意到,当我单击注册文件的按钮 (type='submit') 时,它也会触发登录的 onSubmit。我的问题是为什么会出现这种行为?是因为两个表单字段都已经在 dom 中了吗?或者是其他东西?我真的很想知道这种行为背后的原因以及如何解决它。谢谢。

【问题讨论】:

    标签: javascript reactjs forms bootstrap-modal react-bootstrap


    【解决方案1】:

    将其中一个按钮设为 type="button" 并添加一个 onClick 操作。另一个应该这样工作。

    【讨论】:

      【解决方案2】:

      这只是原生 HTML button 行为。如documentation 所述,按钮元素包含type 属性,接受3 个值:submitresetbutton。如果type 属性与submit 值一起提供,它将

      提交当前表单数据。

      在 React-bootstrap 的 Form 组件的内部深处,它可能使用了 HTML Form 元素,因此单击按钮会触发与 Form.submit() 相同的机制。

      如果您不希望这种行为,您可以简单地删除 type 属性,或将 type 属性设置为按钮 (type="button")。

      【讨论】:

      • 感谢您的回复,但如果我将按钮的 type 属性更改为其他内容,我将无法获得默认的 Html 验证。
      • @CharlesLukes 啊,我明白了。在这种情况下,您介意发布按钮的代码吗?通常,如果您想将type 保留为提交,防止按钮触发 Form.submit() 的一种方法是在 onclick 事件上使用 event.preventDefault()。 (developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-06
      相关资源
      最近更新 更多