Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Эмуляция keyup


Автор: capitan 4.8.2008, 20:07
Суть задачи такова. Есть несколько input и textarea на keyup которых вешается функция.
Код

var ns6=document.getElementById&&!document.all

function countlimit(maxlength,id){
    lengthleft = $(id).value.length;
    limit_now = maxlength - lengthleft;
    
    if(limit_now <= 0) {
        $(id).value = $(id).value.substring(0,maxlength);
        limit_now = 0;
    }
    
    $('limit_'+id).update(limit_now);
}

function Flimit(title, col, id, limit) {
        if(col == '') {
            col = '#757575';
        }
        var limit_text='<small style="color:'+col+'">'+title+'<span id="limit_'+id+'">'+limit+'</span><small>';
        document.write(limit_text);
        
        
        if (document.all){ 
            $(id).onkeyup=function(){ countlimit(limit,id)}
        }
        else if (ns6){ 
            document.body.addEventListener('keyup', function(event) 
            { countlimit(limit,id) }, true); 
        }
        
        countlimit(limit,id);        
}

далее в теле 
          <td> 
                <textarea name="description" id="description" style="width:370px; height:60px;"></textarea>
                <script>
                     Flimit("Осталось ввести символов: ", "", "description",100);
                </script> 
            </td>
<td> 
                <textarea name="description1" id="description1" style="width:370px; height:60px;"></textarea>
                <script>
                     Flimit("Осталось ввести символов: ", "", "description1",150);
                </script> 
            </td>


Задача такая. При нажатии на кнопку очистить все инпуты и соответственно пересчитать символы. Т.е. сэмулировать выполнение ф-ции countlimit();

Запускать как countlimit('100', description) - не предлагать. JS не должен зависить от шаблона. Какие у кого варианты?

Автор: ksnk 4.8.2008, 21:17
Меня смущает конструкт var ns6=document.getElementById&&!document.all. Оно надо? Вообще-то onkeyup - вполне себе w3c-шное свойство контрола textarea, так что шарахаться от него, наверное, не стоит.

Таким образом, можно выкинуть addEventListener и везде пользовать onkeyup.

Все нужные нам textarea должны обладать каким-то характерным свойством. Классом, к примеру, характерным или еще чем. Так что пробежаться по всем таким элементам и дернуть за onkeyup. Как-нибудь так: 
Код

var x = document.getElementByTagName('textarea'), y=x.length;
while(y--)
    x[y].onkeyup && x[y].onkeyup() ;


Автор: capitan 5.8.2008, 17:14
ksnk,  убрал addEventListener. Действительно, что-то перемудрил. А проблему решил так:
Код

var e_array = new Array();

function Flimit(title, col, id, limit) {
        if(col == '') {
            col = '#757575';
        }
        var limit_text='<small style="color:'+col+'">'+title+'<span id="limit_'+id+'">'+limit+'</span><small>';
        document.write(limit_text);
        $(id).onkeyup=function(){ countlimit(limit,id)}
        countlimit(limit,id);
        var e_ids = e_array.length;
        e_array[e_ids] = {evId: id, evLimit:limit};        
}

function ClearEvents() {
    for(i=0; i<e_array.length; i++) {
        $(e_array[i].evId).value = ''; 
        $('limit_'+e_array[i].evId).update(e_array[i].evLimit);
    } 



очищаю вызывая ClearEvents();

Спасибо за помощь.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)