0
我有一个奇怪的jQuery与多个事件处理程序的问题。我试图实现这一目标是:在JQuery中处理多个事件的问题
- 用户选择的页面
- 上的一些文字。如果选择不为空 - 显示上下文菜单
- 如果用户点击了其他地方 - 上下文菜单应消失
我有上述麻烦,有时上下文菜单显示正确,有时它会出现,并在用户选择后消失。请帮忙。请参阅下面我的代码的相关部分。另外,当用户通过双击选择一个段落或一个词时 - 出现上下文菜单并快速消失。
var ContextMenu = {
...
show: function(e) {
var z = this;
if (!this.shown) {
if (this.contextMenu) {
this.contextMenu.css({
left: e.pageX,
top: e.pageY
}).slideDown('fast');
this.shown = true;
}
var hideHandler = function() {
z.hide(this);
};
$(document.body).bind("click", hideHandler);
}
},
hide: function(hideHandler) {
if (this.contextMenu && this.shown) {
this.contextMenu.slideUp('fast');
this.shown = false;
$(document.body).unbind("click", hideHandler);
}
}
};
// Context menu display logic
$(document.body).bind("mousedown mouseup", function(e) {
if ((window.getSelection().toString() != "") && (!ContextMenu.shown)) {
ContextMenu.show(e);
}
});
感谢您的回答菲利克斯,可惜的是并没有解决它:(更改为“鼠标松开”之后 - 我的上下文菜单出现并立即消失的时间100%不要不知道该怎么办 – Greg 2010-04-10 12:55:26
@Felix - 我试着用'setTimeout()'来绑定隐藏点击处理程序;) – 2010-04-10 13:15:50
以下是Nick Craver的建议,我试着改变这一行: $(document.body)。绑定(“点击”,hideHandler); ()函数(){ $(document.body).bind(“click”,hideHandler); },2000); 它只能使用一次 - 并且上下文菜单显示正确的行为。但是,之后事情会回滚到“出现/立即消失”。 还有其他想法吗? 我有点加了一个'关闭'按钮,我的上下文菜单,它工作正常,但它不是很优雅。 – Greg 2010-04-10 13:46:28