主题: 自定义菜单会出现多出几个空菜单项
作者: 一个程序员, 发布日期: 2013-12-28 11:37:15, 浏览数: 1979
操作系统:

Windows7 64


浏览器版本:

Firefox


KindEditor版本:

4.1.10


自定义菜单代码:

editor.addContextmenu({
            title: "替换图片", 
            click : function() {
                alert('clicked');
            },
            cond : function() {
//                console.log(this);
                return true; 
            },
        });


修复的代码:

function _bindContextmenuEvent() {
var self = this, doc = self.edit.doc;
K(doc).contextmenu(function(e) {
if (self.menu) {
self.hideMenu();
}
if (!self.useContextmenu) {
e.preventDefault();
return;
}
if (self._contextmenus.length === 0) {
return;
}
var maxWidth = 0, items = [], prevItem = null;
_each(self._contextmenus, function() {
if (this.title == '-') {
if (prevItem == null || prevItem.title == '-') {
return ;
}
items.push(this);
prevItem = this;
return;
}
if (this.cond && this.cond()) {
items.push(this);
prevItem = this;
if (this.width && this.width > maxWidth) {
maxWidth = this.width;
}
}
});
while (items.length > 0 && items[0].title == '-') {
items.shift();
}
while (items.length > 0 && items[items.length - 1].title == '-') {
items.pop();
}
if (items.length > 0) {
e.preventDefault();
var pos = K(self.edit.iframe).pos(),
menu = _menu({
x : pos.x + e.clientX,
y : pos.y + e.clientY,
width : maxWidth,
css : { visibility: 'hidden' },
shadowMode : self.shadowMode
});
_each(items, function() {
if (this.title) {
menu.addItem(this);
}
});
var docEl = _docElement(menu.doc),
menuHeight = menu.div.height();
if (e.clientY + menuHeight >= docEl.clientHeight - 100) {
menu.pos(menu.x, _removeUnit(menu.y) - menuHeight);
}
menu.div.css('visibility', 'visible');
self.menu = menu;
}
});
}


另外:这个算法可以减少一次循环。


PS:还有是cond参数必需是函数,而文档中是bool值

PSS:论坛怎么没有找出密码的功能,要反馈个问题这么难,不应该要登录才能反馈

发表新帖 发表回复