1

Drupal7でCKEditor3.6.5.7647を使用して、フィルター処理されたすべてのHTMLテキストフィールドをWYSIWYGエディターに変換しています。Drupalはこれを自動的に行いますが、フォームの検証を台無しにします。実際、drupalはerrorクラスをtextareaに正しく適用しますが、textareaは非表示になり、WYSIWYGエディターに置き換えられ、ユーザーはそのクラスの効果を見ることができなくなります(赤い境界線)。errorこれは、すべてのWYSIWYGを見て、関連するテキストエリアにクラスが設定されている場合は境界線を赤に設定するスクリプトを追加することで簡単に修正できると思いましたが、WYSIWYGがビルドされる前にスクリプトが実行されており、壊れています。それ。私がこの仕事をすることができた唯一の方法はこのようなものです:

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

ご覧のとおり、タイムアウトを使用して、WYSIWYGを構築するスクリプトが終了したときにのみスクリプトが実行されるようにしていますが、これを行うためのより良い方法があるかどうか疑問に思いました。

解決済み

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 に答える