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