Подсчет кол-ва символов в вез.редакторе

danneo

Честный
Регистрация
13 Ноя 2007
Сообщения
1.526
Реакции
121
В PHP вывожу HTML-код формы, туда и подключение виз.редактора.
Код:
$(function(){

   tinymce.init({
     selector: 'textarea#text_review',
     language : "{$lang['wysiwyg_language']}",
     width : "100%",
     height : 300,
     theme: "modern",
     plugins: ["link"],
     и т.д.
Загрузка через $(function(){});
Все подключается нормально.
Далее, мне нужно посчитать кол-во знаков в текстовом поле .
Делаю так:
Код:
$('#cnt_chars span').text( tinyMCE.get('text_review').getContent({format : 'text'}).length );
Далее описываю события для изменения статистики при вводе нового текста.
, но пишет, что tinyMCE.get(...) is null
Тоже через $(function(){});
Видимо, виз.редактор еще не создался. Пробовал все совместить последовательно в один файл, все равно ошибка. Если выполнять код через консоль после загрузки всей страницы, то все срабатывает.
Чего еще можно придумать, в чем проблема, не могу сообразить?
 
tinyMCE - это переменная, полученная от init()

var tinyMCE = tinymce.init({ ... тут дальнейший код

Вместо tinyMCE можно любое имя переменной
 
tinyMCE - это переменная, полученная от init()

var tinyMCE = tinymce.init({ ... тут дальнейший код

Вместо tinyMCE можно любое имя переменной
Не понял, к чему это? Если про создание
Код:
tinymce.init({
     selector: 'textar
То это создается виз.редактор. Он создается нормально. Проблема в другом.
 
Как вариант, добавить таймаут чтобы редактор успел подгрузится и потом уже снимать данные

setTimeout(function(){....},1000);

или еще так чтоб наверняка

var mytimer = setInterval(function(){
if(tinyMCE != undefined){
.....
clearInterval(mytimer);
}​
},500);

Но я думаю в редакторе уже должны быть встроены калбеки на инициализацию или события какие-то, посмотри доки, может там есть что вроде afterInit: function
 
Для просмотра ссылки Войди или Зарегистрируйся - событие при создании редактора

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

tinymce.init() - функция возвращает экземпляр класса для управления конкретным редактором на странице.

Код:
var redactor = tinymce.init({
selector: '#text_review'
});

var value = redactor.getContent();
 
Для просмотра ссылки Войди или Зарегистрируйся - событие при создании редактора
А чтобы обращаться к определенному редактору, надо использовать переменную, в которой класс, полученный при создании редактора.
tinymce.init() - функция возвращает экземпляр класса для управления конкретным редактором на странице.
Код:
var redactor = tinymce.init({
selector: '#text_review'
});
var value = redactor.getContent();
Не для моего уровня :)
Я создал, например:
Код:
var editor = tinymce.init({
        selector: 'textarea#text_review',
        language : "ru",
......
});
Ниже пишу:
Код:
tinymce.execCommand("mceAddControl", false, "text_review");
    tinymce.onAddEditor.add(function(mgr,ed) {
        console.log('A new editor is available' + ed.id);
    });
Выходи ошибка:
Код:
tinymce.onAddEditor is undefined
Если писать в консоль браузера, то первая строка выдает false, вторая - ошибку - не находит tinymce
Если обращат не к а editor, т.е. var editor = tinymce.init({});, то ошибка - editor is undefined

Нашел даже метод: Для просмотра ссылки Войди или Зарегистрируйся
Код:
function myCustomOnChangeHandler(inst){
        alert("Some one modified something");
        alert("The HTML is now:"+ inst.getBody().innerHTML);
}

tinyMCE.init({
        ...
        onchange_callback :"myCustomOnChangeHandler"
});
Один фиг, ничего не происходит, вообще ничего.
Пробую сделать в онлайне, не получается подключить удаленно js файл редактора: Для просмотра ссылки Войди или Зарегистрируйся

Нашел еще решение, в setup запихнуть:
Код:
ed.onEvent.add(function(ed) {
                 alert('asdfasdf');
            });
Тоже не помогло: ed.onNodeChange is undefined
 
Последнее редактирование:
Нашел еще решение, в setup запихнуть:
Код:
ed.onEvent.add(function(ed) {
                 alert('asdfasdf');
            });
Тоже не помогло: ed.onNodeChange is undefined
HTML:
tinymce.init({
        selector: '#text_review',
     setup: function (ed) {
        ed.on('init', function(en) {
            alert(en.target.getContent({format : 'text'}).length);
        });
    }
    });
А если JQuery подключен, то очень простой вариант .text() до инициализации tinymce... Хотя наверное можно и после. Во всяком случае должно вернуть именно text - без тегов.
Код:
$('#text_review').text().length
 
Последнее редактирование:
HTML:
tinymce.init({
        selector: '#text_review',
     setup: function (ed) {
        ed.on('init', function(en) {
            alert(en.target.getContent({format : 'text'}).length);
        });
    }
    });
А если JQuery подключен, то очень простой вариант .text() до инициализации tinymce... Хотя наверное можно и после. Во всяком случае должно вернуть именно text - без тегов.
Код:
$('#text_review').text().length
Проблема то в том, что поле изменяется, вводятся новые буквы, и нужно динамически выводить подсчет. А этот вариант выдаст только во время вывода страницы и редактора. Т.е. описать событие change.
А jquery получает данные из textarea, а не из редактора.
 
Последнее редактирование:
HTML:
tinymce.init({
    selector: '#text_review',
    setup: function (ed) {
        ed.on('init change KeyUp', function(en) {
            var c = tinymce.get('text_review').getContent({format : 'text'}).length;
            console.log(c);
        });  
     }
});
Можно было бы, нажал бы на "спасибо" несколько раз :) Благодарю!
 
Назад
Сверху