Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Эмуляция keyup, Возможно ли? 
:(
    Опции темы
capitan
Дата 4.8.2008, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 27.2.2005
Где: Москва

Репутация: нет
Всего: 13



Суть задачи такова. Есть несколько 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 не должен зависить от шаблона. Какие у кого варианты?

Это сообщение отредактировал(а) capitan - 4.8.2008, 20:08
PM MAIL WWW ICQ   Вверх
ksnk
Дата 4.8.2008, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



Меня смущает конструкт 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() ;



Это сообщение отредактировал(а) ksnk - 4.8.2008, 21:18


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
capitan
Дата 5.8.2008, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 27.2.2005
Где: Москва

Репутация: нет
Всего: 13



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();

Спасибо за помощь.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0817 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.