Javascript 如果存在模式,如何取消模糊事件?

Javascript 如果存在模式,如何取消模糊事件?,javascript,jquery,wysiwyg,redactor,Javascript,Jquery,Wysiwyg,Redactor,我使用所见即所得HTML编辑器作为内联编辑器 当用户单击可编辑行并调用编辑器时,模糊后,编辑器将被销毁并保存数据 element.bind('click', function($event) { element.redactor({ focus: true }); }); element.on('blur', functi

我使用所见即所得HTML编辑器作为内联编辑器

当用户单击可编辑行并调用编辑器时,模糊后,编辑器将被销毁并保存数据

            element.bind('click', function($event) {
                element.redactor({
                    focus: true
                });
            });
            element.on('blur', function($event){
                var ckValue = element.getCode();
                scope.$apply(function () {
                    setter(scope, ckValue);
                });
                element.destroyEditor();
                compileElement();
            });

我遇到的问题是当编辑器打开一个上传图片的模式时。焦点将更改为模式窗口。是否有方法更改/链接焦点,以便在打开模式时不会触发模糊事件?

您可以通过多种方式来执行此操作。我想到了其中一个。当编辑器打开模态时,您只需将元素上的模糊事件解除绑定,如下所示:

element.unbind('blur');
element.bind('blur');
这样模糊事件就不会被触发

并且,在关闭模式后,再次将元素上的模糊事件绑定为:

element.unbind('blur');
element.bind('blur');

就这样。

应该非常简单:

element.on('blur', function($event) {
    if ($("#IdValueOfTheImageUploader").length < 1) {
        var ckValue = element.getCode();
        scope.$apply(function () {
            setter(scope, ckValue);
        });
        element.destroyEditor();
        compileElement();
    }
});
element.on('blur',函数($event){
if($(“#图像上传器的IDValueOfImageUploader”).length<1){
var ckValue=element.getCode();
作用域:$apply(函数(){
设置器(范围、值);
});
元素。destroyEditor();
compileElement();
}
});
或者,如果上载程序已生成但不可见,请将if语句更改为:

    if ($("#IdValueOfTheImageUploader:visible").length < 1) {
if($(“#图像上传器的IDValueOfImageUploader:可见”).length<1){
基本上,它检查上传程序是否存在,如果存在,则跳过触发“保存并销毁”逻辑


根据您添加图像上传程序的方式,您可能还必须小心遇到竞争事件(即,在代码检查是否存在图像上传程序时,该图像上传程序尚未加载到页面上[或者,如果使用第二种方法,则显示在页面上])。您应该能够通过在切换焦点之前构建上载程序来避免它,但如果没有,则添加一个超时,以给它加载/显示时间。

我省略了一些其他需要/问题。即调用和处理窗口中的多个redactor实例。我们需要能够在blur上销毁当前实例,而不创建n为此,我为各种redactor组件创建了一些检查

            // check if blur event was triggered
            // by entering editor dropdown menu
            function checkDropDisplay(){
                return $('.redactor_dropdown:hover').length > 0
            }

            // check if currently hovering over toolbar
            function checkHover(){
                return $('.redactor_box:hover').length > 0
            }

            // check if a redactor modal is present
            function checkModalDisplay(){
                return $("#redactor_modal").is(":visible")
            }

            // save editor contents upon leaving editor
            element.bind('blur', function($event){
                // get editor contents and apply to scope
                var editorValue = element.context.innerHTML;
                scope.$apply(function () {
                    setter(scope, editorValue);
                });
                // escape timeout or save & destroy editor
                $timeout(function(){
                    if(checkModalDisplay() || checkDropDisplay() || checkHover()){
                        return false;
                    } else {
                        element.data('redactor').destroy();
                        compileElement();
                    }
                },1);
            }); 

对于任何感兴趣的人来说,Redactor只有一系列回调事件:modalOpenCallback、dropdownshowCallback、ImageuploadcallBack。

似乎最简单的解决方案是添加一个if语句……在模糊处理程序中,检查模态是否存在,如果存在,则什么都不做