当前位置:首页 > 前端开发 > 正文内容

【3分钟学会】一招禁用表单中input输入框回车键主动触发提交事情!

邻居的猫1个月前 (12-09)前端开发1028

知其然知其所以然

在前端项目开发中,偶然会有表单提交的问题:
用户输入表单后,不小心按了回车键,导致提早触发了提交事情?

问题概述

当表单中仅有一个input输入框时,按下回车键就会主动触发提交事情,这是为什么呢?
这儿就要说到一个规范:W3C

文中最终一句话现已解说了原因:
当表单中只要一个单行文本输入字段时,用户署理应承受在该字段中按Enter键作为提交表单的恳求。

已然知道了这种现象不是bug,而是实在的规范后,那咱们如安在项目中防止呢,究竟不是每个项目都期望用户回车的时分忽然就触发了提交事情的。

为了提高用户体会,我将供给几个有用计划!

有用计划

1、原生表单

代码复现

  <form>
    <input type="text" id="myInput">
    <button onclick="submitForm()">Submit</button>
  </form>

上述代码省掉了部分提交事情办法,要点杰出表单。

解决计划

计划1

在 input 中增加 onkeydown="if(event.keyCode==13){return false;}" 。
经过监听 input 输入框的键盘事情来操控表单进程,keyCode的值为13即按下了回车键,回来false,即为撤销提交事情。

 <form>
    <input type="text" id="myInput" onkeydown="if(event.keyCode==13){return false;}">
    <button onclick="submitForm()">Submit</button>
  </form>

计划2

在 form 标签中增加 onsubmit="return false;"。
经过主动对form表单增加提交特点,来操控提交事情,return false即为撤销提交。

  <form onsubmit="return false;">
    <input type="text" id="myInput">
    <button type="button" onclick="submitForm()">Submit</button>
  </form>

注:有的人可能会困惑,为什么自己的增加了相同的代码,没有收效的问题,这儿需求留意一点,便是 button 按钮的默许事情。

MDN-button

从MDN查询到,button 在不增加 type 特点时,默许值是 submit。

所以,假如你依照此计划不收效,请查看下 button 是否有 type 特点,或现已写了 submit ,input 回车仍然会主动提交,请将 button 的 type 特点改为其他值。

计划3

假如你想确保 dom 元素上的整齐清新,也能够经过 js 的方法。

运用JavaScript阻挠默许行为。
你能够给 input 元素增加一个 keypress 或 keydown 事情监听器,并在用户按下回车键时阻挠默许行为。

document.getElementById('myInput').addEventListener('keypress', function (event) {
      if (event.key === 'Enter') {
        event.preventDefault();
      }
    });

2、Vue + ElementPlus

代码复现

<template>
  <el-form>
    <el-form-item label="名字" prop="name">
      <el-input v-model="form.name" />
    </el-form-item>

    <el-form-item>
      <el-button type="primary" @click="submitForm">提交</el-button>
    </el-form-item>
  </el-form>
</template>

<script setup lang="ts">
import { reactive } from 'vue'

interface IForm {
  name: string
}
const form = reactive<IForm>({
  name: '',
})

const submitForm = async () => {
  if (form.name.trim() === '') {
    alert('名字不能为空')
    return
  }

  alert('提交成功:' + form.name)
}
</script>

这儿用的是 Vue3,vue2+elementUI 也是相同的作用。计划同等。

解决计划

ElementPlus 文档中现已很交心了做了提示:ElementPlus-Form

就依照官方给出的计划照做便是:

 <el-form @submit.prevent>
    <el-form-item label="名字" prop="name">
      <el-input v-model="form.name" />
    </el-form-item>

    <el-form-item>
      <el-button type="primary" @click="submitForm">提交</el-button>
    </el-form-item>
  </el-form>

当然,也能够写成 @submit.native 作用是相同的。

3、React + Ant Design

代码复现

import { Form, Input, Button } from 'antd'

interface FormValues {
  username: string
}

const App = () => {
  const onFinish = (values: FormValues) => {
    console.log('Form values:', values)
  }

  return (
    <Form onFinish={onFinish}>
      <Form.Item label="Username" name="username">
        <Input />
      </Form.Item>

      <Form.Item label={null}>
        <Button type="primary" htmlType="submit">
          Submit
        </Button>
      </Form.Item>
    </Form>
  )
}

export default App

解决计划

经过对 input 增加 onKeyDown 监听键盘按键来阻挠回车提交事情。

import React from 'react'
import { Form, Input, Button } from 'antd'

interface FormValues {
  username: string
}

const App = () => {
  const onFinish = (values: FormValues) => {
    console.log('Form values:', values)
  }

  // 监听 onKeyDown 事情,阻挠回车键的默许行为
  const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {
    if (e.key === 'Enter') {
      e.preventDefault()
    }
  }

  return (
    <Form onFinish={onFinish}>
      <Form.Item label="Username" name="username">
        {/* onKeyDown 事情绑定到 Input 组件 */}
        <Input onKeyDown={handleKeyDown} />
      </Form.Item>

      <Form.Item label={null}>
        <Button type="primary" htmlType="submit">
          Submit
        </Button>
      </Form.Item>
    </Form>
  )
}

export default App

上述计划,总结结束!

假如小伙伴有其他更好用的计划,能够留言共享~

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=430

分享给朋友:

“【3分钟学会】一招禁用表单中input输入框回车键主动触发提交事情!” 的相关文章

vue 菜鸟教程, 什么是 Vue.js?

vue 菜鸟教程, 什么是 Vue.js?

1. Vue.js 教程 | 菜鸟教程 该教程介绍了Vue.js的渐进式框架、数据绑定和组件等特性,基于Vue 2.1.8版本。适合有HTML、CSS、JavaScript基础的学习者。你可以通过访问教程。2. Vue3 教程 | 菜鸟教程 如果你对Vue 3版本感兴趣,这个教程介绍了V...

html生成二维码,```html二维码生成示例

在HTML中生成二维码通常需要使用JavaScript库,如qrcode.js。这个库可以帮助你在网页上生成和显示二维码。下面是一个简单的例子,展示如何使用qrcode.js在HTML中生成二维码:1. 首先,你需要包含qrcode.js库。你可以通过CDN链接直接在HTML文件中引入它,或者下载到...

html网页特效代码,html官方下载免费版

html网页特效代码,html官方下载免费版

创建一个HTML网页特效需要结合HTML、CSS和JavaScript。下面是一个简单的示例,创建一个带有旋转特效的按钮:```html旋转特效按钮 .rotatebutton { padding: 10px 20px; backgroundcolor: 4CAF50; colo...

html上传文件,```html    文件上传示例

html上传文件,```html 文件上传示例

要在HTML中上传文件,您可以使用``元素。这个元素允许用户选择文件并上传到服务器。以下是一个基本的示例:```html 文件上传示例 选择文件: 在这个例子中,``元素定义了一个表单,用户可以在其中上传文件。`action`属性指定了表单提交到服务器的URL(在这个例子中...

html课程表代码

html课程表代码

创建一个HTML课程表通常涉及到使用表格(``)元素来组织数据。下面是一个简单的HTML课程表示例,展示了如何使用``、``(行)、``(表头)和``(单元格)来构建课程表:```html课程表 table { width: 100%; bordercollapse: collapse...

html小游戏,```htmlClick Game  body {    textalign: center;    fontfamily: Arial, sansserif;  }  clickButton {    padding: 20px;    fontsize: 24px;    margintop: 20px;  }  clickCount {    fontsize: 48px;    margintop: 20px;  }

html小游戏,```htmlClick Game body { textalign: center; fontfamily: Arial, sansserif; } clickButton { padding: 20px; fontsize: 24px; margintop: 20px; } clickCount { fontsize: 48px; margintop: 20px; }

创建一个简单的HTML小游戏是一个很好的学习项目。下面我将提供一个基本的HTML和JavaScript示例,用于创建一个简单的点击计数游戏。这个游戏的目标是点击屏幕上的一个按钮,每次点击都会增加计数。首先,我们需要创建一个HTML文件。这个文件将包含游戏的布局和基本样式。我们将使用JavaScrip...