[译] 我在阅读 MDN 时发现的 3 个 Input 元素属性

揭秘HTML Input元素

我最近在 Twitter 偶然发现了 Dan Abramov 的推文。他分享的一段简短的代码引起了我注意的。这段代码使用 JavaScript 访问 DOM(Document Object Model)中的 input 元素,并读取或更改了它的一些属性,其中令我惊叹的是 defaultValue 属性。

我立即打开 MDN 阅读更多关于 HTTMLInputElementdefaultValue 属性,并偶然发现了一些我不知道的属性,这便是我写这篇短文的原因。

那么我们开始吧!

defaultValue

这是 Dan 推文中的示例 — HTML 代码中有一个 input 元素,该元素具有 value 属性(attribute)(attribute 在 HTML 代码中定义,而 property 属于 JavaScript 对象)。

<input type="text" value="Hello world">
复制代码

现在可以查找到这个元素并做一些处理。

const input = document.querySelector('input');

console.log(input.value);        // 'Hello world'

input.value = 'New value';

console.log(input.value);        // 'New value'
console.log(input.defaultValue); // 'Hello world'
复制代码

如你所见,属性 value 中定义的值最初反映在元素属性 value 中,这没什么特别,但当你改变 value 时,仍然可以使用 defaultValue 访问“初始值”(defaultChecked 在复选框也可用),这就很酷了!

defaultValueMDN 的定义如下:

[它]返回 / 设置在创建此对象的 HTML 中最初指定的默认值。

你可以在 CodePen 测试这段代码。

indeterminate

indeterminate 属性是一个迷人的属性。你可曾知道复选框具有已选和未选之外的其他可视状态?indeterminate 是一个 property(没有对应的 attribute),你有时候可能会看到带着一个小破折号的复选框,使用这个属性便能做到。

const input = document.querySelector('input');
input.indeterminate = true;
复制代码

indeterminate 设置为 true 对复选框的值没有任何影响,我想到的唯一应用场景是 Chris Coyier 在 CSSTricks 提到的 嵌套复选框。

indeterminate 不仅适用于复选框,还可以用于单选按钮和进度元素。假设有一组单选按钮,没有一个按钮被选择。在你未作出选择前,它们都没有被选中同时也都没有不被选中,这时它们就处于 indeterminate 状态。

还有一种玩法,你可以对被选定元素使用 CSS 伪类 :indeterminate,这样可以在单选按钮组未被选择时方便展示一些特殊的 UI 组件。

.msg {
  display: none;
}

input:indeterminate ~ .msg {
  display: block;
}
复制代码

有关 indeterminate 属性的有趣之处在于你可以将它设置为 truefalse,这将影响复选框的伪类,但不会影响单选按钮。对于单选按钮,按钮组的实际选择状态始终是正确的

顺道提一下,progress 元素 在未定义 value 属性时也将匹配 :indeterminate 选择器。

indeterminateMDN 的定义如下:

[它]表示复选框或单选按钮没有值且处于不确定的状态。复选框的外观会变成第三个状态,但这不影响 checked 属性的值,单击复选框会将值设置为 false。

你可以在 CodePen 测试这段代码。

selectionStartselectionEndselectionDirection

这三个属性可以确定用户选择的内容,并且使用起来非常简单。如果用户在输入字段中选择文本,则可以使用这三个属性计算所选内容。

const input = document.querySelector('input');

setInterval( _ => {
  console.log(
    input.selectionStart,
    input.selectionEnd,
    input.selectionDirection;
  ); // e.g. 2, 5, "forward"
}, 1000)
复制代码

这段测试代码的作用是每秒记录一次选择值。selectionStartselectionEnd 返回描述我选择位置的索引,但是当你使用鼠标或触控板选择时 selectionDirection 返回的是 none,而使用 SHIFT 和箭头选择文本时会返回 forwardbackward

你可以在 CodePen 测试这段代码。

以上是这次分享的全部内容。 :)

快速简单的总结

MDN 是一种奇妙的网站。即使在我使用了 input 元素的八年之后,仍能发现新玩法,这就是我喜欢的 Web 开发的原因。我以后会定期随机阅读 MDN 的文章(我有一个日常 Slack-bot,提醒我打开 bit.ly/randommdn),因为学无止境!我强烈推荐 MDN!

感谢阅读! ❤️

如果发现译文存在错误或其他需要改进的地方,欢迎到 掘金翻译计划 对译文进行修改并 PR,也可获得相应奖励积分。文章开头的 本文永久链接 即为本文在 GitHub 上的 MarkDown 链接。


掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 AndroidiOS前端后端区块链产品设计人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划官方微博知乎专栏

<think>好的,用户想了解HTML或JavaScript中<input>标签的所有属性。首先,我需要回忆<input>标签的常见属性,比如type、name、value这些基本属性。然后,还要考虑HTML5新增的一些属性,比如autocomplete、placeholder、required等。用户提到的引用中提到了list和autocomplete属性,这些需要重点覆盖。 接下来,需要组织这些属性,按功能或类别分类,方便用户理解。比如可以分为基础属性、表单验证属性、HTML5新增属性、事件处理属性等。同,每个属性需要简要说明用途和示例,这样用户能清楚其应用场景。 还要注意用户可能对某些属性的兼容性或者具体用法有疑问,比如pattern属性使用正则表达式,或者form属性如何关联表单。需要确保信息的准确性,可能需要参考MDN文档或其他可靠资源。 另外,用户提到JavaScript中的属性,所以除了HTML属性,可能还要涉及通过JavaScript访问和修改的属性,比如value、checked等。不过主要焦点应该在HTML属性上。 生成相关问题的候,需要考虑用户可能的后续问题,比如常用属性有哪些,如何验证输入,HTML5新增了哪些功能,或者如何通过JavaScript操作input元素。这些问题应该自然延伸当前主题,帮助用户深入理解。 最后,检查是否有遗漏的重要属性,确保列表尽可能全面,同保持结构清晰,避免信息过载。需要确保每个部分都有足够的解释,但不过于冗长。可能还需要提醒用户某些属性需要特定浏览器支持,或者注意事项,比如autocomplete的隐私问题。</think>### HTML `<input>` 标签属性详解 `<input>` 标签是 HTML 表单的核心元素,支持多种属性来控制输入类型、验证规则和行为。以下是其主要属性分类及说明: --- #### 一、**基础属性** 1. **`type`** 定义输入类型,默认值为 `text`。常见类型包括: - `text`:单行文本输入 - `password`:密码输入(掩码显示) - `email`:邮箱格式验证 - `number`:数字输入(可设置步长) - `checkbox`:复选框 - `radio`:单选框 - `file`:文件上传 2. **`name`** 表单提交的字段标识,后端通过此名称获取数据。 3. **`value`** 输入框的默认值,提交发送到服务器。 4. **`placeholder`** 输入框的占位提示文本,输入自动消失。 --- #### 二、**表单验证属性** 1. **`required`** 标记字段为必填项,提交验证是否为空。 2. **`pattern`** 使用正则表达式验证输入格式,例如手机号验证: ```html <input type="text" pattern="\d{11}"> ``` 3. **`min`/`max`** 限制数字或日期输入的范围,适用于 `type="number"` 或 `date`。 4. **`maxlength`** 限制文本输入的最大字符数。 --- #### 三、**HTML5 新增属性** 1. **`autocomplete`** 控制浏览器自动填充功能,可选值 `on`(默认)或 `off`[^2]。 示例:禁用地址自动填充: ```html <input type="text" name="address" autocomplete="off"> ``` 2. **`list`** 关联 `<datalist>` 提供输入建议,例如颜色选择[^1]: ```html <input list="colors"> <datalist id="colors"> <option value="Red"> <option value="Green"> </datalist> ``` 3. **`multiple`** 允许文件上传选择多个文件(仅限 `type="file"`)。 --- #### 四、**事件处理属性JavaScript)** 1. **`onchange`** 输入值变化触发 JavaScript 函数。 2. **`oninput`** 实监听输入内容变化(如搜索框联想)。 3. **`onfocus`/`onblur`** 输入框获取焦点或失去焦点触发。 --- #### 五、**其他实用属性** 1. **`disabled`** 禁用输入字段,数据不会提交到服务器。 2. **`readonly`** 字段只读,数据可提交但不可编辑。 3. **`form`** 指定输入字段关联的表单 ID(适用于跨表单场景)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值