笔记-input type=‘number‘ 可以输入e问题

import React, { useState } from 'react';

function App() {
  const [value, setValue] = useState('');
  const handleInput = (e) => {
    const input = e.target.value;
   
      setValue(input);
   
  };
  return (
    <>
      <input type='number' value={value} onChange={handleInput} />
    </>
  );
}

export default App;

输入后发现还可以输入 “e”?(同样问题在Material UI 的TextField使用中,也会出现该问题)
在这里插入图片描述

input type=‘number’ 中为什么可以输入“e”呢?以下为百度搜索的资料
在HTML的input元素中,type属性为"number"的输入框通常用于接收数字输入。然而,即使设置了"type=number",输入框仍然允许输入科学计数法表示的数字,包括 “e” 或 “E”。
科学计数法是一种表示非常大或非常小的数字的方法,通过使用乘以10的幂来表示。例如,1亿可以表示为1e8,0.000001可以表示为1e-6。
因此,当用户在"type=number"的输入框中输入类似于"1e8"或"1e-6"的值时,浏览器会将其解释为相应的科学计数法表示的数字,并将其视为有效的输入。但需要注意的是,并非所有浏览器都支持科学计数法的输入,因此在实际使用中可能会有一些差异。

我想到的方法:在setValue之前加个正则判断,为纯数字才让它set进去
前言:
1、在if判断中需要加 input===“” , 因为可以让输入的数字清空

function App() {
  const [value, setValue] = useState('');
  const handleInput = (e) => {
    const reg = /^\d+$/;
    const input = e.target.value;
    if (reg.test(input) || input === '') {
      console.log('输入的值为:', input);
      setValue(input);
    }
  };
  return (
    <>
      <input type="number" value={value} onChange={handleInput} />
    </>
  );
}

我在此处连续输入:123e45 结果会存在帮我清空输入框的问题
在这里插入图片描述造成分析:
当我输入123e的时候,控制台输出:输入的值为空==>“”(什么原因我也不清楚),因为输入的值变成了“” ,所以进入到我们if判断中的input===“”,所以setValue成功
解决方法:换个思路把 input 标签中的 type="number"删除,把他当做一个普通的输入框去使用,再使用纯数字的正则去匹配value

import React, { useState } from 'react';

function App() {
  const [value, setValue] = useState('');
  const handleInput = (e) => {
    const reg = /^\d+$/;
    const input = e.target.value;
    if (reg.test(input) || input === '') {
      console.log('输入的值为:', input);
      setValue(input);
    }
  };
  return (
    <>
      <input value={value} onChange={handleInput} />
    </>
  );
}

export default App;

上图:我再次输入:123e456
在这里插入图片描述
问题已经解决!

在Web前端开发中,表单是用户与网站交互的重要组成部分。它们允许用户输入数据并将其发送到服务器处理。以下是关于表单、`<form>`, `<input>`, 和 `<select>` 下拉列表以及多行文本框在Typora笔记中的简单描述: **表单定义**: ```markdown - 表单(Form):HTML中的`<form>`标签用于创建一个可提交数据的界面。它是用户输入信息的核心区域,常搭配`action`属性指向处理表单数据的服务器端脚本或API。 ``` **`<form>` 元素关键属性**: - `method`:规定数据传输的方式,可能是GET或POST,默认为POST,防止数据暴露在URL中。 - `action`:表单提交后的URL,通常是服务器端处理表单请求的地址。 - `enctype`:编码类型,如`application/x-www-form-urlencoded`(默认)或`multipart/form-data`(文件上传)。 **`<input>` 标签**: - 主要用于获取用户输入,包括: - `type="text"`:普通文本输入 - `type="email"`:电子邮件地址输入 - `type="number"`:数值输入 - `type="date"`:日期选择 - `type="checkbox"` 和 `type="radio"`:复选框和单选按钮 **`<select>` 下拉列表(Dropdown or Dropdown List)**: - `type="select"`:创建一个下拉列表,`<option>` 子标签用于提供选项,用户可以选择其中一个。 - `multiple` 属性:允许多选。 **多行文本框 (`<textarea>`)**: - 提供更大的输入空间,让用户能输入多行文本。 - 通常没有预设的行数限制,但可以设置`rows`和`cols`属性来调整大小。 **Typora笔记示例**: ```markdown - 在Typora中编写表单相关笔记- 插入`<form>`标签,设置好`method`和`action`属性。 - 使用`<input>`插入不同类型输入控件,如`<input type="text" name="username">`。 - 对于`<select>`,添加`<option>`标签构建选项,如`<select name="country">...</select>`。 - 使用`<textarea>`创建多行文本框,如`<textarea rows="4" cols="50" name="message"></textarea>`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大白砌墙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值