【问题标题】:Change border colors of TinyMCE on focus and blur在焦点和模糊上更改 TinyMCE 的边框颜色
【发布时间】:2010-12-17 01:16:41
【问题描述】:

我正在使用带有 TinyMCE 的 jQuery。我正在尝试在 TinyMCE 编辑器处于焦点时更改边框颜色,然后在模糊时更改回来。

在 ui.css 中,我添加/更改了这些:

.defaultSkin table.mceLayout {border:0; border-left:1px solid #93a6e1; border-right:1px solid #93a6e1;}
.defaultSkin table.mceLayout tr.mceFirst td {border-top:1px solid #93a6e1;}
.defaultSkin table.mceLayout tr.mceLast td {border-bottom:1px solid #93a6e1;}

我设法为初始化脚本做到了这一点:

$().ready(function() {

    function tinymce_focus(){
        $('.defaultSkin table.mceLayout').css({'border-color' : '#6478D7'});
        $('.defaultSkin table.mceLayout tr.mceFirst td').css({'border-top-color' : '#6478D7'});
        $('.defaultSkin table.mceLayout tr.mceLast td').css({'border-bottom-color' : '#6478D7'});
    }

    function tinymce_blur(){
        $('.defaultSkin table.mceLayout').css({'border-color' : '#93a6e1'});
        $('.defaultSkin table.mceLayout tr.mceFirst td').css({'border-top-color' : '#93a6e1'});
        $('.defaultSkin table.mceLayout tr.mceLast td').css({'border-bottom-color' : '#93a6e1'});
    }

    $('textarea.tinymce').tinymce({
        script_url : 'JS/tinymce/tiny_mce.js',
        theme : "advanced",
        mode : "exact",
          theme : "advanced",
          invalid_elements : "b,i,iframe,font,input,textarea,select,button,form,fieldset,legend,script,noscript,object,embed,table,img,a,h1,h2,h3,h4,h5,h6",

          //theme options 
          theme_advanced_buttons1 : "cut,copy,paste,pastetext,pasteword,selectall,|,undo,redo,|,cleanup,removeformat,|", 
          theme_advanced_buttons2 : "bold,italic,underline,|,bullist,numlist,|,forecolor,backcolor,|", 
          theme_advanced_buttons3 : "", 
          theme_advanced_buttons4 : "", 
          theme_advanced_toolbar_location : "top", 
          theme_advanced_toolbar_align : "left", 
          theme_advanced_statusbar_location : "none", 
          theme_advanced_resizing : false,

          //plugins
          plugins : "inlinepopups,paste",
          dialog_type : "modal",
        paste_auto_cleanup_on_paste : true,


        setup : function(ed) {
              ed.onClick.add(function(ed, evt) {
                  tinymce_focus(); 
              });

           }



    });    


});

...但是这个(点击,更改,边框颜色)是我唯一设法开始工作的事情。我所有的其他尝试要么阻止 TinyMCE 加载,要么什么也没做。我浏览了 TinyMCE wiki 页面和他们的论坛,但无法从散落在各处的小块信息拼凑出完整的画面。

真的有办法做到这一点吗?是我忽略了一些简单的事情,还是实际上实现起来真的很复杂?

【问题讨论】:

    标签: javascript jquery tinymce focus onblur


    【解决方案1】:

    我重新审视了这个问题,最终得到了一个支持更多浏览器的 jQuery 解决方案,因为在 ed.getDoc() 上使用 addEventListener() 函数是命中注定的,而 AddEvent() 函数在全部在 ed.getDoc() 上(“对象不支持函数”错误)。

    以下已确认可在 IE8、Safari 5.1.7、Chrome 19、firefox 3.6 和 12 中运行。它似乎不适用于 Opera 11.64。

    setup: function(ed){
                ed.onInit.add(function(ed){
                    $(ed.getDoc()).contents().find('body').focus(function(){tinymce_focus();});
                    $(ed.getDoc()).contents().find('body').blur(function(){tinymce_blur();});                   
                });
            }
    

    【讨论】:

      【解决方案2】:

      您可以在自己的插件中执行类似的操作

      ed.onInit.add(function(ed){    
          ed.getDoc().addEventListener("click", function(){
               tinymce_focus();
             }
          );
      
          ed.getDoc().addEventListener("blur", function(){
            tinymce_blur();
          }, false);
      });
      

      【讨论】:

      • 有一些错误(缺少右括号并缺少点击侦听器上的“false”),但我最终解决了。但是,这只适用于Firefox。有什么东西可以在其他浏览器中使用吗?
      • 是的,应该有。你可以使用 jquery: $(ed.getDoc()).bind('click', function(){......});
      【解决方案3】:
      setup:function(ed){
        ed.onClick.add(function(ed){
          tinymce_blur();
        });
      
        ed.onInit.add(function(ed){    
          ed.getDoc().addEventListener("blur", function(){
            tinymce_blur();
          }, false);
        });
      }
      

      对于焦点,您可以使用 TinyMCE 的 de 事件“onClick”。对于模糊,响应预览还可以。

      【讨论】:

        【解决方案4】:

        我以为我不久前对此做出了回应,但我想没有。我最终在 tinymce 配置中得到了这个:

        setup: function(ed){
                    ed.onInit.add(function(ed){
        
                        //check for addEventListener -- primarily supported by firefox only
                        var edDoc = ed.getDoc();
                        if ("addEventListener" in edDoc){
                            edDoc.addEventListener("focus", function(){
                                tinymce_focus();
                            }, false);
        
                            edDoc.addEventListener("blur", function(){
                                tinymce_blur();
                            }, false);
                        }
        
                    });
                }
        

        【讨论】:

        • 这适用于 Firefox,但不适用于 Chrome (17)。 adEventListener 存在,但从未触发事件。
        【解决方案5】:
        .tox:not([dir=rtl]) {
            border-color: #a4286a;
        }
        

        【讨论】:

        • 虽然此代码可以解决 OP 的问题,但最好包含关于您的代码如何解决 OP 问题的说明。通过这种方式,未来的访问者可以从您的帖子中学习,并将其应用到他们自己的代码中。 SO 不是编码服务,而是知识资源。此外,高质量、完整的答案更有可能得到支持。这些功能,以及所有帖子都是独立的要求,是 SO 作为一个平台的一些优势,使其与论坛区分开来。您可以编辑以添加其他信息和/或使用源文档补充您的解释。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-29
        • 1970-01-01
        • 2022-11-27
        • 2021-10-05
        • 1970-01-01
        • 2011-07-20
        相关资源
        最近更新 更多