如何在sfWidgetFormTextareaTinyMCE中添加onchange事件?

时间:2013-02-19 14:15:25

标签: php tinymce symfony-1.4 symfony-forms

我需要检测tinymce内容是否已更改。我正在使用symfony 1.4,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
    )
)
));

在我的模板中渲染,我这样做了:

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

我尝试将onchange事件放到原始文本区域,但它没有用。

2 个答案:

答案 0 :(得分:1)

您可以尝试在Widget的attributes数组中传递onchange函数:

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

或者给小部件一个特定的id或类,并使用jQuery添加行为。

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

我会选择后一种选择。

答案 1 :(得分:1)

使用jQuery选择器作为@MichalTrojanowski说是我认为最好的方式。这是无阻碍的。

您也可以使用->render()方法提供属性,就像您对cols&amp; rows

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

顺便说一句,我不认为当用户编辑内容时会触发此方法。由于TinyMCE重新创建一个iframe(或某种类型)来处理编辑器。

您最好查看TinyMCE内置的onChange事件。像这样的东西: