Javascript JQuery中的多事件处理问题
我对多个事件处理程序有一个奇怪的jquery问题。我试图实现的是: 用户在页面上选择一些文本 如果所选内容不为空-显示关联菜单 如果用户单击其他地方-上下文菜单应消失 我遇到了上述问题,即有时上下文菜单正确显示,有时在用户做出选择后立即出现和消失。请帮忙。请参阅下面我的代码的相关部分。此外,当用户通过双击选择一个段落或一个单词时,上下文菜单会出现,并很快再次消失Javascript JQuery中的多事件处理问题,javascript,jquery,events,javascript-events,Javascript,Jquery,Events,Javascript Events,我对多个事件处理程序有一个奇怪的jquery问题。我试图实现的是: 用户在页面上选择一些文本 如果所选内容不为空-显示关联菜单 如果用户单击其他地方-上下文菜单应消失 我遇到了上述问题,即有时上下文菜单正确显示,有时在用户做出选择后立即出现和消失。请帮忙。请参阅下面我的代码的相关部分。此外,当用户通过双击选择一个段落或一个单词时,上下文菜单会出现,并很快再次消失 var ContextMenu = { ... show: function(e) {
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);
}
});
查看仅将事件绑定到mouseup是否有帮助: 据我所知,你不需要将它绑定到mousedown事件 我认为,如果您将其绑定到mousedown事件,并且用户通过拖动鼠标并按下按钮进行选择,您的上下文菜单将显示mousedown,并且当鼠标按钮仍然按下时,单击处理程序将绑定到文档。因此,在完成选择时释放鼠标按钮后,将执行单击,并执行先前绑定的单击处理程序,使菜单再次消失
但我可能错了 感谢Felix的回答,不幸的是,这并没有解决这个问题:在更改为“mouseup”后,我的上下文菜单出现并立即消失100%的时间。我不知道该怎么办。@Felix-我会在绑定hide click处理程序时尝试设置超时;按照Nick Craver的建议,我尝试更改这一行:$document.body.bindclick,hideHandler;to:setTimeoutfunction{$document.body.bindclick,hideHandler;},2000;它只工作一次-上下文菜单显示正确的行为。然而,在那之后,事物会立即回滚以显示/消失。还有其他想法吗?我在我的上下文菜单中添加了一个“关闭”按钮,它工作得很好,尽管它不是很优雅。
$(document.body).bind("mouseup", function(e) {
if ((window.getSelection().toString() != "") && (!ContextMenu.shown)) {
ContextMenu.show(e);
}
});