Почему inputElement.maxLength возвращает -1?

Интересно, почему для свойства maxLength/minLength по умолчанию для HTMLInputElement по умолчанию установлено значение -1.

Существует также запутанное поведение, как показано ниже:

  1. Пример
<input type = "text" />
const inputElement = document.querySelector('input');
console.info(inputElement.maxLength) // -1

  1. Я ставлю maxLength программно
inputElement.maxLength = 2;
console.info(inputElement.maxLength) // 2

И html будет отражать как

<input type = "text" maxlength = "2" />

  1. Я удаляю maxlength = "2" вручную из devtools.
<input type = "text" />

Я получил

console.info(inputElement.maxLength) // undefined

Может кто-нибудь сказать мне, почему это так? В документации такого нет, но я вижу, что все браузеры в этом довольно последовательны.

[Редактировать] 3. в этом примере неправильно, это return -1 https://stackoverflow.com/a/75541575/10465908

Я думаю, что -1 просто означает, что длина не ограничена.

Dean 23.02.2023 11:04
Калькулятор CGPA 12 для семестра
Калькулятор CGPA 12 для семестра
Чтобы запустить этот код и рассчитать CGPA, необходимо сохранить код как HTML-файл, а затем открыть его в веб-браузере. Для этого выполните следующие...
Как собрать/развернуть часть вашего приложения Angular
Как собрать/развернуть часть вашего приложения Angular
Вам когда-нибудь требовалось собрать/развернуть только часть вашего приложения Angular или, возможно, скрыть некоторые маршруты в определенных средах?
Оптимизация React Context шаг за шагом в 4 примерах
Оптимизация React Context шаг за шагом в 4 примерах
При использовании компонентов React в сочетании с Context вы можете оптимизировать рендеринг, обернув ваш компонент React в React.memo сразу после...
Интервьюер: Почему &apos;[] instanceof Object&apos; возвращает &quot;true&quot;?
Интервьюер: Почему '[] instanceof Object' возвращает "true"?
Все мы знаем, что [] instanceof Array возвращает true, но почему [] instanceof Object тоже возвращает true?
Абстрактное синтаксическое дерево (AST) и как оно работает с ReactJS
Абстрактное синтаксическое дерево (AST) и как оно работает с ReactJS
Абстрактное синтаксическое дерево (AST) - это древовидная структура данных, которая представляет структуру и иерархию исходного кода на языке...
1
1
71
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Проницательный вопрос.

Ну, согласно официальной документации Интернета, World Wide Web,

Значение по умолчанию для этого атрибута — неограниченное количество.

А как мы все знаем, компьютеры не могут представлять бесконечность.

Большое число (например, 1 миллиард) большое, но все же не бесконечное или «неограниченное». Так что лучше всего было выбрать отрицательное число (-1). Именно таким образом они не устанавливают ограничение максимальной длины на входе.

Однако обратите внимание, что они решили сделать это только со своей стороны (чтобы сделать этот обходной путь), т.е. мы не можем явно установить -1. Например:

Итак, ответ на мой первоначальный вопрос: https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#limited-to-only-non-negative-numbers , поскольку maxLength имеет тип long.

Но в ходе расследования я обнаружил несколько интересных вещей:

  1. WebKit возвращает -1, но настоящий maxlength — это 524288, другие движки, кажется, не имеют этого ограничения.
  2. Раньше это было 524288 в других браузерах
  3. Во время спецификации атрибутов IDL все они решили вернуться -1
Ответ принят как подходящий

На шаге 3 я получаю -1, когда удаляю атрибут в chrome 110

Ты прав, мой плохой.

Mateusz Daniluk 23.02.2023 08:11

Другие вопросы по теме