2012-11-22 53 views
1

我正在使用Drupal 7上的CKEditor 3.6.5.7647将我过滤的所有HTML文本字段转换为WYSIWYG编辑器。 Drupal会自动执行此操作,但会扰乱表单验证。事实上,drupal仍然正确地将error类正确地加入到textarea中,但textarea现在被隐藏并被WYSIWYG编辑器替代,从而阻止用户看到该类的效果(红色边框)。我认为这可以很容易地通过添加一个脚本来解决所有所见即所得的问题,并且如果关联的textarea设置了error类,则将边框设置为红色,但是我发现在构建所见即所得之前脚本正在执行,打破它。我已经成功地使这项工作的唯一方法是这样的:如何知道生成CKEditor WYSIWYG编辑器的javascript是否已完成执行?

jQuery.noConflict(); 
(function ($) { 
    "use strict"; 

    function fixWYSIWYGHighlights() { 
     $('span.cke_skin_kama').each(function() { 
      if ($(this).prev().hasClass('error')) { 
       $(this).css({ border: '1px solid #f00'}); 
      } 
     }); 
    } 

    $('document').ready(function() { 
     var timeout = window.setTimeout(fixWYSIWYGHighlights, 1000); // TODO Find a better way to launch the script only once the WYSIWYGs are constructed 
    }); 
}(jQuery)); 

正如你所看到的,我使用的是超时,以确保我的脚本只被执行一次,它建立了WYSIWYGs脚本已经终止,但我想知道是否有更好的方法来做到这一点。

解决

由于oleq的回答,我解决我的问题与下面的代码:

jQuery.noConflict(); 
(function ($) { 
    "use strict"; 

    $(document).ready(function() { 
     CKEDITOR.on('instanceReady', function (event) { 
      var textarea = $(event.editor.element.$)[0], 
       element = $(event.editor.container.$)[0]; 
      if($(textarea).hasClass('error')) { 
       $(element).css({ border: '1px solid #f00' }); 
      } 
     }); 
    }); 
}(jQuery)); 
+1

你确定'$('document')。ready(function(){'是正确的吗?不应该是'$(document).ready(function(){'? – Halcyon

+0

我不知道是否比其他人更喜欢,但我知道他们都工作得很好。 – Shawn

+0

他们不在jQuery文档中使用引号 – Shawn

回答

2

我想你应该遵守instanceReady事件及其回调中执行代码:

CKEDITOR.on('instanceReady', function(event) { 
    console.log('Me ready!', event, event.editor); 
}); 
+0

当我的脚本执行时,我并不期望CKEDITOR存在,但它确实有效,请参阅我编辑的工作代码。 – Shawn

相关问题