我正在使用Drupal 7上的CKEditor 3.6.5.7647将我所有已过滤的HTML文本字段转换为WYSIWYG编辑器。 Drupal会自动执行此操作,但它会影响表单验证。实际上,drupal仍然正确地将error
类应用于textarea,但textarea现在被隐藏并被WYSIWYG编辑器取代,阻止用户看到该类的效果(红色边框)。我认为通过添加一个查看所有WYSIWYG的脚本可以很容易地解决这个问题,并且如果关联的textarea设置了error
类,则将它们的边框设置为红色,但我发现我的脚本正在执行之前WYSIWYGs已经建成,打破了它。我设法完成这项工作的唯一方法是:
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));
答案 0 :(得分:2)
我想您应该观察instanceReady事件并在其回调中执行您的代码:
CKEDITOR.on( 'instanceReady', function( event ) {
console.log( 'Me ready!', event, event.editor );
});