2013-02-19 2 views
1

Мне нужно определить, изменилось ли содержимое tinymce. Я использую symfony 1.4, sfWidgetFormTextareaTinyMCE.Как добавить событие onchange в sfWidgetFormTextareaTinyMCE?

Часть моей формы имеет следующий код:

$tiny_mce_config = 'theme: "advanced",' . 
     'theme_advanced_buttons1: "bold,italic,link",' . 
     'theme_advanced_buttons2: "",' . 
     'theme_advanced_buttons3: "",' . 
     'theme_advanced_statusbar_location : "none",'. 
     'cleanup: true,'. 
     'force_br_newlines: true,'. 
     'force_p_newlines: false,'. 
     'forced_root_block: "",'. 
     'valid_elements : "br,strong,b,em,i,a[href|title|target]"'; 


$this->setWidgets(array(
'intro' => new sfWidgetFormTextareaTinyMCE(
    array(
     'width' => '616', 
     'config'  => $tiny_mce_config 
    ) 
) 
)); 

Rendering в моем шаблоне, я сделал это:

<?php echo $form['intro']->renderLabel('Introduction'); ?> 
<?php echo $form['intro']->render(array('rows' => 3, 'cols' => 100)); ?> 
<?php echo $form['intro']->renderError(); ?> 

Я пытался ставить OnChange событие оригинального текстового поля, но Бесполезный» т работы.

ответ

1

Использование селектора jQuery как @MichalTrojanowski говорит, что это лучший способ, я думаю. Это непротиворечиво.

Вы также можете дать атрибут из метода ->render(), как вы делали для cols & rows:

<?php echo $form['intro']->render(array(
    'rows'  => 3, 
    'cols'  => 100, 
    'onchange' => 'myfunction();' 
)); ?> 

Кстати, я не думаю, что этот метод будет срабатывать, когда пользователь будет редактировать содержимое. Поскольку TinyMCE повторно создает iframe (или вроде) для обработки редактора.

Возможно, вам стоит взглянуть на событие onChange, встроенное внутри TinyMCE. Что-то вроде этих:

+0

Я пробовал ваше первое решение, но оно не сработало. Тем не менее, я принял ваш ответ за то, что предложенный метод не будет работать, когда пользователь отредактирует контент; поскольку TinyMCE повторно создает iframe для обработки редактора. Кстати, спасибо за ссылки. – Floricel

1

Вы можете либо попытаться передать OnChange функцию в attributes массиве Widget:

new sfWidgetFormTextareaTinyMCE(array(...), array('onchange' => '...')); 

Или дайте виджету конкретный идентификатор или класс и использовать JQuery, чтобы добавить поведение.

$('#myTinyMCETextarea').change(function() {...}); 

Я бы выбрал последний вариант.

+0

Я попытался упомянутые способы, но все-таки, даже если я редактировать тонированное виджет, OnChange событие не увольняют. – Floricel

Смежные вопросы