2011-06-06 348 views
13

我試圖使用ContextMenu plugin將上下文菜單延遲綁定到元素。所以第一右鍵單擊這些元素,我想:觸發器右鍵單擊

  1. 攔截通過對某個「uncontextmenued」一流的現場活動右擊,
  2. 確定data('events').contextmenu存在
  3. 如果沒有,附加上下文菜單(並更改班級以避免重新投入此實時進程),
  4. 重新拋出右鍵單擊事件以顯示右鍵單擊。

我對最後一個項目有問題。 jQuery允許.click().trigger('click')模擬左鍵單擊,但似乎沒有辦法通過trigger觸發右鍵單擊事件。

或者有嗎?

回答

26

您可以通過

$('#element').trigger({ 
    type: 'mousedown', 
    which: 3 
}); 

http://api.jquery.com/trigger/#example-5

+2

好吧,讓我走在正確的軌道上。只是爲了完成答案,引用的插件實際上需要一個mousedown,然後是一個mouseup ...因此,觸發像Niclas所說的必須跟着一個觸發器('mouseup')。由於它是'button'屬性,而不是插件讀取的'which'屬性,所以我的問題的實際答案是$('#element')。trigger('mousedown',{button:2})。觸發('mouseup')。感謝Niclas。 – glmxndr 2011-06-06 12:42:07

+0

嗨subtenante,100萬感謝,我只是在相同的功能後,你的回答真的幫了我很多,但我認爲你有一個錯誤,我不得不改變它: $('#element')。trigger ({類型: '鼠標按下',按鈕:2})觸發({類型: '鼠標鬆開'}); ,使其工作。 – 2011-09-06 15:48:59

+0

與我的情況相同,「mouseup」而不是「mousedown」。 – gumkins 2013-07-25 04:48:22

-2

與此類似,但我不確定您是否可能指的是jQuery UI數據,但是。

$('#element').mousedown(function(event) 
{ 
    if(event.which == 3) 
    { 
     if(typeof($(this).data('events')) === 'undefined') 
     { 
      $(this).data('events', { somedata: 'hello' }); 
     } 
     else 
     { 
      // "re-throw" right click context menu 
     } 
    } 
}); 
+0

對不起,但我想觸發一個右鍵單擊事件,而不是附加一個事件。 – glmxndr 2011-06-06 10:46:11

4

還有就是做這個較新的方式觸發它:

$('#element').triggerHandler('contextmenu'); 

Documentation can be found here

+3

對我來說''contextMenu''不起作用。相反,''contextmenu''正常工作。 – lort 2014-02-11 14:56:52

+0

謝謝,這是一個錯字。 – 2014-02-11 15:29:39