2013-02-19 91 views
1

我需要检测tinymce内容是否已经改变。我正在使用symfony 1.4,sfWidgetFormTextareaTinyMCE。我的形式如何在sfWidgetFormTextareaTinyMCE中添加onchange事件?

部分具有下面的代码:

$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事件到原来的textarea的,但它没”工作。

回答

1

使用@MichalTrojanowski所说的jQuery选择器是我认为的最佳方式。它没有阻碍。

你也可以给从->render()方法的属性,因为你没有为cols & rows

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

顺便说一句,我不认为这个方法会被解雇时,用户将编辑内容。由于TinyMCE重新创建一个iframe(或某种)来处理编辑器。

你最好看看TinyMCE内建的onChange事件。像这些:

+0

我试过你的第一个解决方案,但没有奏效。不过,我接受了你的观点,即当用户编辑内容时,建议方法不起作用;因为TinyMCE会重新创建一个iframe来处理编辑器。顺便说一句,谢谢你的链接。 – Floricel 2013-02-20 01:04:37

1

您可以尝试通过平变化功能attributes阵列了Widget的:

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

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

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

我会选择后者。

+0

我想提到的方式,但仍,即使我编辑控件呈现,将不会触发onchange事件。 – Floricel 2013-02-20 00:59:20