|
|
|
| Здравствуйте,
вот рабочий скрипт который считает символы без тегов:
<html>
<head>
<script>
function counter(el)
{
var wrapper = document.createElement('DIV');
wrapper.innerHTML = el.value;
var len = (wrapper.textContent || wrapper.innerText).length;
document.getElementById('count').innerHTML = len + ' | ' + el.value.length;
document.getElementById('kb').innerHTML = (len/1024).toFixed(2);
}
</script>
</head>
<body>
Вы ввели: <span id='count'>0</span> символов. <span id='kb'>0</span>Kb
<form>
<textarea id="text" onkeypress="counter(this);" onkeyup="counter(this);" onchange="counter(this);"></textarea><br>
</form>
</body>
</html>
|
Проблема в том что при использовании вместо обычного "textarea", WYSIWYG - CKEditor подсчет символов не происходит. Я подключил к этому html необходимые сценарии CKEditor и заменил на
<textarea class="ckeditor" id="editor1" name="editor1" onkeypress="counter(this);" onkeyup="counter(this);" onchange="counter(this);"></textarea>
|
WYSIWYG работает, а подсчета нет. Подскажите, пожалуйста, в чем может быть проблема?
Когда убираешь начинает работать, но WYSIWYG же отключается. | |
|
|
|
|
|
|
|
|
для: ЯСА
(21.01.2013 в 16:36)
| | Не разобрался, а можно конкретней? | |
|
|
|
|
|
|
|
для: volodumir
(21.01.2013 в 20:40)
| | при использовании CKEditor'a ваш тег <textarea> НЕДОСТУПЕН пользователю
потому что CKEditor создаёт новый тег <DIV> , который НАКЛАДЫВАЕТСЯ на ваш <textarea> СВЕРХУ и ПОЛНОСТЬЮ ЕГО ПЕРЕКРЫВАЕТ
события onkeypress, onkeyup, onchange на вашем объекте <textarea> НЕ ПРОИСХОДЯТ
все эти события происходят на новом теге <DIV>
куда ещё конкретней-то?
<body>
<input type="radio">Радиокнопка
<h1>Отметьте её мышью!</h1>
<script>
var dv = document.createElement ('DIV');
with (dv.style) width = '300px', height = '200px', backgroundColor ='red', position = 'absolute', top = 0, left = 0;
document.body.appendChild (dv);
alert ('Попробуйте кликом мыши отметить радиокнопку.\nНе получается?\nА почему не получается?');
</script>
</body>
|
| |
|
|
|
|
|
|
|
для: ЯСА
(22.01.2013 в 01:12)
| | Почему не работает я понял, а как сделать чтобы работало? Или это не реально? | |
|
|
|
|
138.4 Кб |
|
|
для: volodumir
(22.01.2013 в 21:58)
| | почему нереально?
вам надо найти тот элемент, который создаётся скриптом CKEditor'a, на котором и происходят все нужные вам события
и дать команду на обработку этих событий
в вашем случае (для CKEditor'a) - это тег <BODY> внутри документа в <IFRAME> - см. вложение
в случае по ссылке, что я вам давал - это тег <DIV> (см. вложение в том посте по ссылке)
главная проблема - определить момент, когда скрипт CKEditor'a полностью сформирует этот тег <BODY>, чтобы к нему можно было обратиться уже вашим скриптом
если не влезать внутрь кода CKEditor'a, то придётся использовать таймер
---------
где-нить перед тегом </body> на вашей странице пропишите скриптовой блок <script></script> со следующим кодом:
function setCount ()
{
if (!document.frames.length) TMR = setTimeout (setCount, 200); // ждём, пока не сформирован <IFRAME>
else // <IFRAME> на странице появился
{
clearTimeout (TMR); // обнуляем таймер
var obj = document.frames [0].document.body;
obj.onkeyup = function () // назначаем функцию вывода количества символов
{
document.getElementById('count').innerHTML = document.frames [0].document.body.innerHTML.length;
}
}
}
|
1. событие onkeyup полностью поглощает событие onkeypress, поэтому последнее обрабатывать не нужно (зачем дублировать?)
2. событие onchange на теге <BODY> не поддерживается | |
|
|
|
|
|
|
|
для: ЯСА
(23.01.2013 в 00:14)
| | Большое спасибо, буду разбираться. | |
|
|
|
|
|
|
|
для: volodumir
(23.01.2013 в 01:14)
| | если вам надо БЕЗ ТЕГОВ, то вместо innerHTML.length пропишите textContent.length - 2
два "лишних" символа - это символ \n у тега <body> как у блочного тега + символ перевода строки \n между </body> и </html>
это кроссбраузерно, начиная с MSIE9 | |
|
|
|