2014-07-02 76 views
2

觸發我有一個jQuery的功能,象這樣:退出jQuery函數通過鼠標按下事件

$(function(){ 
    $('.viewArea').mousedown(function(event) { 
     if(event.which === 3){ // On right click 
      pos = ("(" + event.pageX + "," + event.pageY + ")"); 
      console.log(pos); // Log the xy coords of click to console 
      $.contextMenu("destroy"); // Unregister previous context menu 
      $.contextMenu({ // Create new context menu 
       selector: '.viewArea', 
       callback: function(key, options){ 
        var m = "clicked: " + key; 
        window.console && console.log(m); 
       }, 
       items: { 
        "pos":{name:pos,disabled:true}, // have pos in context menu 
        "ci1":{name:"ContextMenu 1"}, 
        "ci2":{name:"ContextMenu 2"} 
       } 
      }); 
     } 
    }) 
}); 

此功能使用jQuery插件「jQuery的文本菜單」。

我想要的是能夠右鍵單擊並在右鍵菜單中顯示正確的座標。問題是,在創建第一個上下文菜單之後,立即創建第二個(右鍵點擊其他地方)將不會顯示更新後的座標。走出第一個上下文菜單(通過左鍵單擊外部或選擇一個選項),然後打開新的上下文菜單將顯示更新後的座標。

問題的更深層次的檢驗表明,控制檯不記錄任何如果你不斷點擊右鍵打開上下文菜單,當它應該被記錄的新位置。換句話說,只有一次檢測到右鍵單擊並且不會再次檢查該功能,直到發生不同的輸入爲止。

我已經嘗試使用.click事件,而不是(左鍵單擊)但發生同樣的問題。我也嘗試將jquery.contextMenu.js中的重定位標誌更改爲false,假設上下文菜單不是重建,但也沒有改變任何內容。

任何幫助將得到廣泛讚賞。

+0

你能提供的jsfiddle,所以我們可以可視化的問題呢? – Raptus

+0

@ Raptus我原本應該這樣做.. [http://jsfiddle.net/Ruxb7/](http://jsfiddle.net/Ruxb7/)。另外,通過刪除菜單重新定位的部分代碼,我實現了更改上下文菜單的JavaScript文件的相當混亂的解決方案。不幸的是,這會導致上下文菜單關閉,然後您需要再次右鍵單擊重新打開它。所以它不能解決根本問題,但它確保用戶不會從多重點擊問題中獲取不正確的信息。 – ganon

回答

2

撰文稱插件這裏...

我不知道它到底是什麼你想達到那裏。但爲了幫助您走向正確的方向,我已經修正了您的示例,使用position函數調用位置顯示的更新。

http://jsfiddle.net/Ruxb7/1/

+0

這正是我所期待的。謝謝,這非常有幫助。 – ganon

2

這是目前不可能的。通過檢查jsfiddle上的html,可以看到contextMenu的實現方式,將一個不可見的元素放在您將contextMenu綁定到(.viewArea)的任何元素上。你可以通過檢查覆蓋元素#context-menu-layer來驗證這一點(使用jQuery來搜索這個元素將不會在jsfiddle中工作,因爲輸出的例子是在iframe中的),但你仍然可以手動檢查chrome調試器的'Elements'選項卡)

您也可以通過查看source code來驗證此情況。在第347行的layerClick函數中,您可以看到所有事件都被該處理程序終止(行358-359)。處理程序綁定到位於0129行的#context-menu-layer上的所有mousedown事件。

我推薦使用不同的庫,以適合您的需求。

與此同時,我已經爲您提交了一個bug jQuery contextMenu創建者/維護者。的