Интересно, почему для свойства maxLength/minLength по умолчанию для HTMLInputElement по умолчанию установлено значение -1.
Существует также запутанное поведение, как показано ниже:
<input type = "text" />
const inputElement = document.querySelector('input');
console.info(inputElement.maxLength) // -1
maxLength
программноinputElement.maxLength = 2;
console.info(inputElement.maxLength) // 2
и html будет отражать как
<input type = "text" maxlength = "2" />
maxlength = "2"
вручную из devtools.<input type = "text" />
я получил
console.info(inputElement.maxLength) // undefined
может кто-нибудь сказать мне, почему это так? В документации такого нет, но я вижу, что все браузеры в этом довольно последовательны.
[Редактировать] 3. в этом примере неправильно, это return -1 https://stackoverflow.com/a/75541575/10465908
Проницательный вопрос.
Ну, согласно официальной документации Интернета, 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
, но настоящий maxlength
— это 524288, другие движки, кажется, не имеют этого ограничения.524288
в других браузерах-1
На шаге 3 я получаю -1
, когда удаляю атрибут в chrome 110
Ты прав, мой плохой.
Я думаю, что -1 просто означает, что длина не ограничена.