Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблема с событием onPaste в textarea
 
 автор: Dr Lines   (26.06.2010 в 10:38)   письмо автору
 
 

Пишу счетчик символов в текстовом поле textarea.
Количество символов считается и выводится каждый раз, как происходят следующие события в textarea:
onKeyUp
onKeyDown
onPaste

Проблема в том, что при возникновении события onPaste и onKeyDown, количество символов, получаемое
от textarea является старым, не обновленным, символ еще считается не вставленным.

При наборе с клавиатуры, событие onKeyUp всеже получает верное, новое, количество символов.
Какже тогда быть с onPaste, когда текст вставляется при помощи мыши?

Вот пример кода с onKeyDown, который наглядно может продемонстрировать проблему:
<html>
<body>

<script>
window.onload = function()
{
    var itxt = document.getElementById('itxt');
    var iinf = document.getElementById('iinf');

    itxt.onkeydown = function()
    {
        iinf.innerHTML = itxt.value.length;
    }
}
</script>

<textarea id="itxt"></textarea>
<span id="iinf"></span>
</body>

</html>


p.s
Форма добавления комментария на youtube работает какраз таки правильно, как мне надо, но
разобраться в их оптимизированном коде, практически не реально.

  Ответить  
 
 автор: sim5   (26.06.2010 в 10:49)   письмо автору
 
   для: Dr Lines   (26.06.2010 в 10:38)
 

Событие onPaste обрабатывает только IE.

  Ответить  
 
 автор: Dr Lines   (26.06.2010 в 11:06)   письмо автору
 
   для: sim5   (26.06.2010 в 10:49)
 

Есть соображения, как сделать обработку событий для подсчета символов в textarea, как на youtube?

onPaste тестировалось в FireFox 3.6.4 , Safari 4, Opera 10.53, IE8
Не работает только в Opera

Раз в некоторых браузерах не работает событие onPaste, пускай, не критично вобщем. А в которых работает - пусть делает свое дело.

Суть проблемы я описал понятно.
Нужно как-то получать при onKeyDown или onPaste настоящее(новое) количество символов в textarea. Также как и в поле комментария на youtube.

  Ответить  
 
 автор: sim5   (26.06.2010 в 11:15)   письмо автору
 
   для: Dr Lines   (26.06.2010 в 11:06)
 

Не городите и не используйте то, что присуще некоторому браузеру, ибо их расплодилось...
А как организовать как на youtube, просто - просмотреть и изучить их js-сценарий.

  Ответить  
 
 автор: Dr Lines   (26.06.2010 в 11:19)   письмо автору
 
   для: sim5   (26.06.2010 в 11:15)
 

Попробовал, их сценарий описан тут:
http://s.ytimg.com/yt/jsbin/www-core-vfl173404.js

Чуть мозг не свернул.
Поэтому обратился к вам, может уже сталкивались с такой проблемой.

p.s
По поводу "не городить лишнего" - мне порой кажется вы не до конца читаете то, что я пишу

  Ответить  
 
 автор: sim5   (26.06.2010 в 11:45)   письмо автору
 
   для: Dr Lines   (26.06.2010 в 11:19)
 

Ну почему не читаю, читаю, просто вам надо иметь учебник или справочник по JS, дабы знать, что любят все браузеры, а что только одному нравится ;-)

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

  Ответить  
 
 автор: Dr Lines   (26.06.2010 в 16:22)   письмо автору
 
   для: Dr Lines   (26.06.2010 в 10:38)
 

А вот и решение


<html>
<body>
<script type="text/javascript">
window.onload = function()
{
    var attachTextListener = function(input, func)
    {
        if(window.addEventListener)
            input.addEventListener('input', func, false);
        else
            input.attachEvent('onpropertychange', function(){func.call(input);});
    }
    
    attachTextListener(document.getElementById('itxt'), function()
    {
        var t = document.getElementById('itxt');
        var i = document.getElementById('iinf');
        
        i.innerHTML = t.value.length;
    });
}
</script>

<textarea id="itxt"></textarea>
<span id="iinf">0</span>

</body>

</html>


Информация по данному решению была взята тут: http://www.greywyvern.com/?post=282

Такой вариант не просто перехватывает keyDown onPaste во всех(почти) браузерах, а вообще все изменения, будь то вставка\удаление текста при помощи контекстного меню браузера, или просто редактирование с клавиатуры.
Это и есть тот самый способ, примененный на youtube

[поправлено модератором]

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования