关于input type=“number“的那些事

1、maxlength属性失效

当你设置<input type="number">maxlength属性时

<input type="number" maxlength="10"/>

你会发现这并不起效果。
在这里插入图片描述

1.1原因

maxlength属性是限制输入框中输入的字符长度,而<input type="number">类型的输入框只能输入数字,而不是字符,所以不生效。

1.2解决

通过js裁剪输入长度

<template>
  <input type="number" v-model="inputValue" @input="onInput"/>
</template>
<script setup lang="ts">
import { ref } from 'vue';
const inputValue = ref<string>('');

const onInput = (event) => {
  // 获取输入值
  let newValue = event.target.value;

  // 如果输入长度超过 10,则截取前 10 个字符
  if (newValue.length > 10) {
    newValue = newValue.slice(0, 10);
  }

  // 更新 inputValue 的值
  inputValue.value = newValue;
}
</script>

运行结果:输入长度成功控制
在这里插入图片描述

2、去掉默认的步进器

当你使用<input type="number">时,你会发现输入框聚焦时,会出现步进器

<input type="number"/>

如图所示:
在这里插入图片描述

2.1方法

如何去掉呢?
通过css样式去除。注意:不同的浏览器需要添加相应的浏览器CSS前缀

input[type=number]::-webkit-inner-spin-button,
input[type=number]::-webkit-outer-spin-button {
  -webkit-appearance: none;
}

去除后,和普通的input框样式一致。
在这里插入图片描述

3、字符输入问题

3.1支持输入的字符

你可能会发现,当你使用<input type="number">时,不仅能输入数字,竟然还能输入这些字符:

符号说明
+加号,表示正数
-减号,表示负数
.小数点
e,Ee是数学中的自然常数,约为2.178,所以在输⼊e,E的时候,输⼊框会将其看作⼀个数字。
这里还有个细节,e,E不能同时输入。

此外,它们还有一个共同点:在输入这些字符时,输入框获取的值为空
在这里插入图片描述
这里可以发现控制台打印了4次空字符串
在这里插入图片描述

3.2只允许输入数字和小数的例子

以vue3举例

<template>
  <input type="number" v-model="inputValue" @keydown="onKeyDown"/>
</template>

只允许输入数字(包括小数)

<script setup lang="ts">
  import { ref } from 'vue';
  const inputValue = ref<string>('');

  const onKeyDown = (event) => {
    const {key} = event;
    // 如果按下的是特定字符,则阻止默认行为
    if (['+', '-', 'e', 'E'].includes(key)) {
        event.preventDefault();
      }
    console.log(`inputValue.value: ${inputValue.value}`);
  }
</script>

这样就能规避这些字符带来的影响。当然组件库的校验是支持的,我测试过element-plus,它是正确的。

4、类型问题

虽然称为type="number",可实际上得到的值却还是string类型。在使用typescript写代码的时候,我们可能想直接得到一个number类型的值。

4.1直接获得number类型的值

在vue3 中,使用v-model.number修饰符即可优雅解决

<template>
  <input type="number" v-model.number="inputValue" @input="onInput" />
</template>

执行结果正确,小数也支持。
在这里插入图片描述

### HTML Input Type Number 的用法与特性 `<input>` 标签中的 `type="number"` 属性用于创建一个允许用户输入数值的控件。此类型的输入框通常会提供上下箭头来调整数值大小,并支持一系列特定属性以控制其行为和验证规则。 以下是关于 `<input type="number">` 的一些重要特性和用法: #### 基本语法 ```html <input type="number" name="quantity" min="1" max="10"> ``` 上述代码定义了一个名为 `quantity` 的数字输入字段,最小值为 1,最大值为 10[^3]。 #### 关键属性 - **min 和 max**: 定义可接受的最小值 (`min`) 和最大值 (`max`)。如果用户的输入超出范围,则表单无法提交。 ```html <input type="number" id="age" name="age" min="18" max="99"> ``` - **step**: 控制增量步数,默认值为 1。可以设置为任何正浮点数或关键字 `any` 来表示不限定步长。 ```html <!-- 用户只能输入偶数 --> <input type="number" step="2"> <!-- 允许任意实数 --> <input type="number" step="any"> ``` - **value**: 设置默认值或初始值。 ```html <input type="number" value="5"> ``` - **required**: 表明该字段必填。 ```html <input type="number" required> ``` 这些属性共同作用于提升用户体验以及数据的有效性校验[^4]。 #### 浏览器兼容性注意项 尽管大多数现代浏览器都很好地支持 `type="number"` 输入框,但在某些情况下可能存在差异。例如,在移动设备上的实现可能略有不同;另外需要注意的是,Internet Explorer 对许多新标准的支持有限,因此建议避免使用旧版 IE 进行开发调试工作[^2]。 #### 示例代码片段 下面展示如何构建一个简单的年龄收集界面: ```html <form action="/submit-age" method="post"> 年龄:<br/> <input type="number" id="ageField" name="ageField" min="1" max="120" required><br/><br/> <button type="submit">确认</button> </form> ``` 通过以上方法即可有效利用 HTML 中的 number 类型输入域完成相应的功能需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值