1

我在 Drupal 7 上使用 CKEditor 3.6.5.7647 将所有过滤的 HTML 文本字段转换为所见即所得的编辑器。Drupal 会自动执行此操作,但会打乱表单验证。实际上,drupal 仍然正确地将error类应用到 textarea,但是 textarea 现在被隐藏并被 WYSIWYG 编辑器替换,从而阻止用户看到该类的效果(红色边框)。我认为这可以通过添加一个查看所有所见即所得的脚本来轻松解决,如果相关的文本区域设置了error类,则将它们的边框设置为红色,但我发现我的脚本是在所见即所得构建之前执行的,打破它。我设法完成这项工作的唯一方法是这样的:

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));

如您所见,我使用超时来确保我的脚本仅在构建所见即所得的脚本终止后才被执行,但我想知道是否有更好的方法来执行此操作。

解决了

感谢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));
4

1 回答 1

2

我想您应该观察instanceReady事件并在其回调中执行您的代码:

CKEDITOR.on( 'instanceReady', function( event ) {
    console.log( 'Me ready!', event, event.editor );
});
于 2012-11-22T22:21:36.413 回答