Chrome 为什么输入元素.maxLength返回-1?

2g32fytz  于 2023-02-27  发布在  Go
关注(0)|答案(3)|浏览(182)

我想知道为什么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

5q4ezhmt

5q4ezhmt1#

很有见地的问题。
嗯,根据网络的官方文件,万维网,
此属性的默认值为无限数
我们都知道计算机不能表示无穷大。
一个大的数字(比如10亿)很大,但仍然不是无穷大或“无限的”。所以最好的方法是选择一个负数(-1)。正是这样,他们没有对输入设置最大长度约束。
但是,请注意,他们决定仅从自己的Angular 进行设置(以执行此变通方案),即我们无法显式设置-1。例如:

b1payxdu

b1payxdu2#

所以我最初问题的答案是https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#limited-to-only-non-negative-numbers,因为maxLengthlong类型。
但我在调查过程中发现了一些有趣的事情:

  1. WebKit返回-1,但真实的的maxlength是524288,其他引擎似乎没有这个限制。
    1.很久以前在其他浏览器中是524288
    1.在IDL属性规范中,它们都决定返回-1
qjp7pelc

qjp7pelc3#

对于步骤3,当我在chrome 110中删除属性时,我得到了-1

相关问题