Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как правильно очистить maxlength в input? (https://javascript.ru/forum/events/18226-kak-pravilno-ochistit-maxlength-v-input.html)

Маэстро 22.06.2011 14:51

Как правильно очистить maxlength в input?
 
Как известно, если в HTML-коде у поля input не проставлен атрибут/свойство maxlength=..., то данный input не накладывает ограничений на длину вводимого текста. Но если в поле уже было проставлено какое-то ограничение, то как его снять? т.е. отменить? Я почему-то думал, что надо (как во многих системах) присвоить ему 0, или пустую строку. И вот что получилось в результате:

при присвоении нуля свойству инпут.maxLength в броузерах происходит следующее:

1.IE - длина становится = 0 и инпут не позволяет вводить ни один символ (можно использовать для имитации режима read-only)

2.FireFox - ведет себя также как IE

3.Google Chrome - длина становится = 524288 !

4.Opera - ведет себя прикольно: показывает, что значение maxLength = 0, но на самом деле оно остается тем, что было присвоено ранее (например, 10)

Так как же очистить правильно?

ksa 22.06.2011 15:21

Цитата:

Сообщение от Маэстро
Так как же очистить правильно?

А если "пусто" или undefine?

nikita.mmf 22.06.2011 15:22

А если поробывать вот-так
input.removeAttribute("max-length");

или вот так
input.maxLength = -1;

Маэстро 22.06.2011 15:52

ребята... ну конечно же я всё это проверил... просто не стал сюда писать/захламлять "статистическими исследованиями"
input.maxLength = '';
input.maxLength = undefined;
input.removeAttribute("max-length");
input.maxLength = -1;
// и даже пробовал это:
delete(input.maxLength);

Это всё ведет себя по-разному в разных броузерах, но не выполняет задуманного - не снимает ограничение длины ввода.
А вы это проверяли?

ksa 22.06.2011 16:18

Цитата:

Сообщение от Маэстро
А вы это проверяли?

Так это не наш сон... :)

nikita.mmf 22.06.2011 16:23

var removeMaxLength = function ((){
	var maxLength = document.createElement("input").maxLength;
	return function( input ) {
		try {
			input.maxLength = maxLength;
		} catch ( e ) {
			input.setAttribute("maxlength", maxLength);
		} 
	};
})();

Работает во всех IE, chrome последний, FF4 и какая-то Opera

Маэстро 22.06.2011 17:17

1. Почему-то у меня javascript ругался на вот это: function ((){

2. Откровенно говоря, не очень понял, как работает Ваш скрипт, особенно меня беспокоит постоянное создание элемента document.createElement("input") - не будет никакого накопления памяти?

3. Я перестал тратить время на эти исследования и сделал одной строчкой: input.maxLength = 8000; - все-равно ни одно поле в таблице не примет больше (ограничение базы).

4. Спасибо, что потратили на меня время.

melky 22.06.2011 17:39

Цитата:

Сообщение от Маэстро (Сообщение 109998)
1. Почему-то у меня javascript ругался на вот это: function ((){.

почему-то ?

"интересно девки пляшут"

Цитата:

function ((){ -----> (function (){
Цитата:

Сообщение от Маэстро (Сообщение 109998)
2. Откровенно говоря, не очень понял, как работает Ваш скрипт, особенно меня беспокоит постоянное создание элемента document.createElement("input") - не будет никакого накопления памяти?

он и рад бы всю память на 9000 гигабайт заполнить, да сборщик мусора мешает

т.е. нет, не будет, короче говоря

nikita.mmf 22.06.2011 17:50

melky, спасибо большое. Просто не там скобку поставил.

Маэстро 22.06.2011 17:59

Цитата:

Сообщение от melky (Сообщение 110004)
почему-то ?
"интересно девки пляшут"

ну конечно же я написал это в мягкой форме... не буду же я делать замечание человеку, который хотел мне помочь и тыкать его носом в его ошибки? а код подправил и запустил в рабочее состояние. и все остались довольны :)

nikita.mmf 22.06.2011 18:14

Цитата:

2. Откровенно говоря, не очень понял, как работает Ваш скрипт, особенно меня беспокоит постоянное создание элемента document.createElement("input") - не будет никакого накопления памяти?
Элемент создается только один раз, при объявление. Возможно потечет память в IE - надо тестировать, но можно написать на всякий случай так
var tmpInput = document.createElement("input");
var maxLength = tmpImput.maxLength;
tmpInput = null;


Часовой пояс GMT +3, время: 00:30.