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

HTML+CSS+JavaScript

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

 

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

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

тема: Число знаков в textarea без тегов
 
 автор: volodumir   (21.01.2013 в 16:28)   письмо автору
 
 

Здравствуйте,
вот рабочий скрипт который считает символы без тегов:
<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 работает, а подсчета нет. Подскажите, пожалуйста, в чем может быть проблема?

Когда убираешь
class="ckeditor"
начинает работать, но WYSIWYG же отключается.

  Ответить  
 
 автор: ЯСА   (21.01.2013 в 16:36)   письмо автору
 
   для: volodumir   (21.01.2013 в 16:28)
 

http://www.softtime.ru/forum/read.php?id_forum=4&id_theme=87972#post523141

  Ответить  
 
 автор: volodumir   (21.01.2013 в 20:40)   письмо автору
 
   для: ЯСА   (21.01.2013 в 16:36)
 

Не разобрался, а можно конкретней?

  Ответить  
 
 автор: ЯСА   (22.01.2013 в 01:12)   письмо автору
 
   для: 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>

  Ответить  
 
 автор: volodumir   (22.01.2013 в 21:58)   письмо автору
 
   для: ЯСА   (22.01.2013 в 01:12)
 

Почему не работает я понял, а как сделать чтобы работало? Или это не реально?

  Ответить  
 
 автор: ЯСА   (23.01.2013 в 00:14)   письмо автору
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> не поддерживается

  Ответить  
 
 автор: volodumir   (23.01.2013 в 01:14)   письмо автору
 
   для: ЯСА   (23.01.2013 в 00:14)
 

Большое спасибо, буду разбираться.

  Ответить  
 
 автор: ЯСА   (23.01.2013 в 03:57)   письмо автору
 
   для: volodumir   (23.01.2013 в 01:14)
 

если вам надо БЕЗ ТЕГОВ, то вместо innerHTML.length пропишите textContent.length - 2

два "лишних" символа - это символ \n у тега <body> как у блочного тега + символ перевода строки \n между </body> и </html>

это кроссбраузерно, начиная с MSIE9

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

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