我想知道为什么HTMLInputElement的默认maxLength/minLength属性默认设置为-1。
也有如下令人困惑的行为:
1.示例
<input type="text" />
const inputElement = document.querySelector('input');
console.log(inputElement.maxLength) // -1
1.我通过编程设置了maxLength
inputElement.maxLength = 2;
console.log(inputElement.maxLength) // 2
而HTML将反映为
<input type="text" maxlength="2" />
1.我从devtools中手动删除了maxlength="2"
。
<input type="text" />
我得到
console.log(inputElement.maxLength) // undefined
有没有人能告诉我为什么会这样?文档中没有这样的东西,但我可以看到每个浏览器在这方面都相当一致。
[Edit] 3.在本例中是错误的,返回-1 https://stackoverflow.com/a/75541575/10465908
3条答案
按热度按时间5q4ezhmt1#
很有见地的问题。
嗯,根据网络的官方文件,万维网,
此属性的默认值为无限数
我们都知道计算机不能表示无穷大。
一个大的数字(比如10亿)很大,但仍然不是无穷大或“无限的”。所以最好的方法是选择一个负数(-1)。正是这样,他们没有对输入设置最大长度约束。
但是,请注意,他们决定仅从自己的Angular 进行设置(以执行此变通方案),即我们无法显式设置-1。例如:
b1payxdu2#
所以我最初问题的答案是https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#limited-to-only-non-negative-numbers,因为
maxLength
是long
类型。但我在调查过程中发现了一些有趣的事情:
-1
,但真实的的maxlength
是524288,其他引擎似乎没有这个限制。1.很久以前在其他浏览器中是
524288
1.在IDL属性规范中,它们都决定返回
-1
qjp7pelc3#
对于步骤3,当我在chrome 110中删除属性时,我得到了
-1