Одна javascript-функция для разных полей textarea

Avenus

Under Glory Yield
Одна javascript-функция для разных полей textarea

На сайте на различных страницах есть формы с textarea.

PHP:
<form name='board' action='' method='post'>
...
<textarea
onChange=maxlength_lang(board) onKeyUp=maxlength_lang(board)
onKeyDown=maxlength_lang(board) onClick=maxlength_lang(board)
onKeyPress=maxlength_lang(board)
name='b_text'></textarea>
...
</form>
Для каждого textarea разрешено ввожить различное количество символов. Управляется через javascript-функции.
Сейчас для каждого textarea javascript-функции. В нее передаются только имена форм - (form):

PHP:
function maxlength_lang(form){ 
 var maxlength=255; // максимум символов для textarea
 str=form.b_text.value; // b_text - имя textarea
 dlina=str.length; 
 if(dlina>maxlength)form.b_text.value=str.substring(0,maxlength); 
 form.left_lang.value=(maxlength-dlina); 
}
Подскажите, пожалуйста, как мне сделать функцию универсальной для различных форм, т.е. передавать в нее имя формы, имя поля textarea и максимальное количество символов ввода?
И, соответсвенно, чтобы фукнция управляла вводом :)
 

dark-demon

d(^-^)b
что-то типа такого:
<textarea onchange="check(this,50)"></textarea>

плюс инициализацию, которая продублирует onchange на onmouseup и другие события.
 

Avenus

Under Glory Yield
Я пробовал просто передавать в функцию:
PHP:
onChange="maxlength_lang(board,b_text,255)"
А вот в самой функции намудрил, что не работает :)
PHP:
function maxlength_lang(form,field,max){  
 str=form.field.value;
 dlina=str.length;
 if(dlina>max)form.field.value=str.substring(0,max);  
 form.left_lang.value=(max-dlina);  
}
Походу, неправильно :/
 

Avenus

Under Glory Yield
Пробую так:
PHP:
onchange=maxlength_lang(this,255)
функция:
PHP:
function maxlength_lang(textarea,max){ 
 var str=textarea.value;
 dlina=str.length; 
 if(dlina>max) textarea.value=str.substring(0,max); 
 left_lang.value=(max-dlina); 
}
Все равно не работает, ввод не прекращается после 255 символов :(
 

dimagolov

Новичок
Avenus
ты на все события повесил эту функцию?
да, пиши var dlina, не засоряй глобальную область перемеенных
 

Avenus

Under Glory Yield
onСhange хватит?
А как функция тогда выглядеть должна будет... подскажи, пожалуйста! :)

-~{}~ 31.07.07 16:30:

Что, никто не знает ответ? :(

-~{}~ 07.08.07 02:25:

Странно, вроде форум умных людей...
Либо никто не знает ответа, либо просто помочь никто не хочет...

-~{}~ 07.08.07 02:30:

Что необходимо заменить в функции, чтобы она работала для различных форм с разными именами поля
PHP:
textarea
и разным ограничением количества вводимых символов?
PHP:
function maxlength_lang(form){  // form - передаваемое имя формы
 var maxlength=255; // 255 - максимум символов для textarea 
 str=form.b_text.value; // b_text - имя поля textarea 
 dlina=str.length;  
 if(dlina>maxlength)form.b_text.value=str.substring(0,maxlength);  
 form.left_lang.value=(maxlength-dlina);  
}
...
Подскажите, пожалуйста!
 

dimagolov

Новичок
Avenus, поставь alert в свою функцию и ты поймешь, когда отрабатывает onсhange и что для того, что ты хочешь добиться он не подходит. но в мане есть и другие события, которые можно на инпут повесить, которые более подходят.

вопрос "что заменить надо" был задан серьезно? это не понятно из кода?
 

Avenus

Under Glory Yield
Я заменял в функции переменные вот так:
PHP:
function maxlength_lang(form,field,max){   
 str=form.field.value; 
 dlina=str.length; 
 if(dlina>max)form.field.value=str.substring(0,max);   
 form.left_lang.value=(max-dlina);   
}
Так не работает!
А так как я до этого написал, предыдущее мое сообщение - так работает, но только для конкретного поля и формы и числа вводимых символов:

-~{}~ 09.08.07 02:28:

В общем разобрался. Спасибо всем, кто не отвечал :) ... пришлось долго самому копаться, но зато пришел к результату.
Сделал даже проще:
JavaScript-функция:
PHP:
function text_limiter(field,maxlimit){
if(field.value.length>maxlimit) field.value=field.value.substring(0,maxlimit);
}
HTML-форма:
PHP:
<textarea onKeyDown='text_limiter(this.form.msg,255);' onKeyUp='text_limiter(this.form.msg,255);' name='msg'></textarea>
:)

-~{}~ 09.08.07 02:31:

Еще можно добавить событие onPaste, чтобы с помощтю мыши не вставлять больше положенного ограничения :)
 

dimagolov

Новичок
Avenus, поизучай в дебагере куда указывает this в обработчике событий в зависимости от того, как этот обработчик был установлен. ясности в понимании JavaScript однозначно прибавится.
 
Сверху