|
|
|
| Пишу счетчик символов в текстовом поле 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 работает какраз таки правильно, как мне надо, но
разобраться в их оптимизированном коде, практически не реально. | |
|
|
|
|
|
|
|
для: Dr Lines
(26.06.2010 в 10:38)
| | Событие onPaste обрабатывает только IE. | |
|
|
|
|
|
|
|
для: 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. | |
|
|
|
|
|
|
|
для: Dr Lines
(26.06.2010 в 11:06)
| | Не городите и не используйте то, что присуще некоторому браузеру, ибо их расплодилось...
А как организовать как на youtube, просто - просмотреть и изучить их js-сценарий. | |
|
|
|
|
|
|
|
для: sim5
(26.06.2010 в 11:15)
| | Попробовал, их сценарий описан тут:
http://s.ytimg.com/yt/jsbin/www-core-vfl173404.js
Чуть мозг не свернул.
Поэтому обратился к вам, может уже сталкивались с такой проблемой.
p.s
По поводу "не городить лишнего" - мне порой кажется вы не до конца читаете то, что я пишу | |
|
|
|
|
|
|
|
для: Dr Lines
(26.06.2010 в 11:19)
| | Ну почему не читаю, читаю, просто вам надо иметь учебник или справочник по JS, дабы знать, что любят все браузеры, а что только одному нравится ;-)
Насчет скрипта, разбирайтесь, а коли не хватает знаний заказывайте кому либо за оплату, либо ждите у кого есть свободное время задаром это сделать. | |
|
|
|
|
|
|
|
для: 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
[поправлено модератором] | |
|
|
|