Xpoint
   [напомнить пароль]

Не работает атрибут maxlength для многострочных textbox'ов

2006-05-05 15:41:04 [обр] Георгий Мирошников [досье]

Доброго времени суток.

Я столкнулся со следующей проблемой:
Из-за того, что элемент <textbox multiline="true"> является лишь враппером элемента <html:textarea>, значения его атрибута maxlength и свойства maxLength молча игнорируются.
Поискав соответвующий баг или feature request в Багзилле, я не нашел ничего конструктивного по этой теме.

Перед тем, как самому создать feature request, решил задать здесь пару вопросов:

  1. Неужели эта функциональность никому не нужна? :)
  2. Есть ли всё же способ эмулировать этот атрибут?

С уважением,
Георгий Мирошников.

спустя 3 часа 25 минут [обр] Владимир Палант [досье]
Да, я тоже ничего не нашел по этому поводу.
  1. Думаю, что да :) Единственное применение этому, которое я видел — отправление SMS'ок.
  2. Есть. Ставьте обработчик на событие input и обрезайте textbox.value.
спустя 17 часов [обр] Георгий Мирошников [досье]

ОК, тогда относительно способов эмуляции.
Раньше я делал так:

XUL:
<textbox multiline="true" oninput="maxlength(this, 40)"/>

JS:
function maxlength(element, l)
{
    if (!element || !element.value)
        return;
    
    if (l < 0)
        return;
    
    if (l == 0)
    {
        element.value = '';
        return;
    }
    
    var selectionStart = element.selectionStart;
    var selectionEnd = element.selectionEnd;
    
    element.value = element.value.substring(0, l);
    
    if (selectionStart >= l + 1)
        selectionStart = l;
    if (selectionEnd >= l + 1)
        selectionEnd = l;
    
    element.selectionStart = selectionStart;
    element.selectionEnd = selectionEnd;
}

Но всплыл новый баг:
Если текста настолько много, что появляется горизонтальный или вертикальный скроллбар, при переназначении свойства value он перематывается в начальное положение (крайнее левое и крайнее верхнее соответственно) и пользователь не видит текст, который печатает.
Я надеялся, что установка атрибута selectionStart / selectionEnd должа "перематывать" скроллбары в нужное положение, чтобы выделенный текст был видимым, но это не так :(
Кроме того, согласно этому багу, движок не предоставляет средств для программного управления скроллингом в многострочных текстбоксах.

Похоже, ситуация безвыходная :(
Что-ж, буду писать feature request.

Спасибо,
Георгий Мирошников.

Powered by POEM™ Engine Copyright © 2002-2005