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