获取CKEditor中单击工具栏按钮的状态

时间:2015-03-03 20:30:37

标签: javascript ckeditor

我试图在CKEditor对话框之外禁用我的JSP页面上存在的按钮。具体来说,当单击CKEditor工具栏上的“Source”按钮时,我想运行一些代码,这些代码只是禁用我网页上的“发布”按钮 - 如果HTML源代码可用于编辑,则不允许发布。我尝试了in this SO posting建议的事件委派。这将起作用,除了使用CKEditor Source按钮,类在完成其工作时从“cke_button_off”变为“cke_button_disabled”到“cke_button_on”。在引用的SO帖子中呈现的Manwal代码查询特定类的hassclass以确定是否启用了按钮。很好的清洁解决方案,除了,正如我所说,有一个中间的“cke_button_disabled”类,一旦点击按钮就会参与,所以检查总是在我的代码中失败,因为我没有检查“cke_button_disabled”类。我只关心设置的两个css类:cke_button_on和cke_button_off。

这就是我的困境。在查询已设置的css类之前,我已经考虑过等待click事件完成,但我找不到这样做的方法,以便在CKEditor Source按钮单击完成后我可以查询Source按钮的css类。我尝试过CKEditor的afterCommandExec但是没有用。这是代码:

CKEDITOR.on('instanceReady', function (e) {
  var editor = e.editor;
  editor.on('afterCommandExec', handleAfterCommandExec);

function handleAfterCommandExec(event) {
    var commandName = event.data.name;
// For 'source' commmand:
    if (commandName == 'source') {
        var xxx = $(document.getElementById('cke_15'));
        if(xxx.hasClass('cke_button_off')) { //cke_button_off when 
                                             //     notdepressed 
            console.log("In handleAfterCommandExec::  
                                CKEDITOR SOURCE BUTTON CLICKED!!!!");
            $('#button-publishButton').attr("disabled", "true");
        }else {
            console.log("In handleAfterCommandExec:: 
                  CKEDITOR SOURCE BUTTON UNNNNACLICKED!!!!");
            $("#button-publishButton").removeAttr("disabled");
        }
    }
}

我也尝试过回调:

$(document).on('click', '.cke_button__source', function(){
   test();
});

function test() {
var xxx = $(document.getElementById('cke_15'));
if(xxx.hasClass('cke_button_off')) { //cke_button_off when not depressed 
                                     //cke_button_disabled
.....same code as previous

}

明白我的意思?每次我的代码运行时,hassclass查询的结果总是“cke_disabled”。任何人都可以建议一种方法来查询该CKEditor“Source”按钮css值的状态,以便给我我想要的东西 - button_on或button_off?也许在检查css值之前还有另一种等待源按钮代码完成的方法,或者,当单击CKEditor工具栏按钮时,可能还有另一种方法禁用JSP页面上的按钮?感谢您的时间和帮助。

1 个答案:

答案 0 :(得分:0)

你不应该像这样用JQuery攻击CKEditor。究竟是什么问题?是在捕获事件还是弄清楚它是打开还是关闭?如果您在检测源模式是打开还是关闭时遇到问题,您应该可以通过编辑器模式属性获取该模式:

http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-mode